C# 멀티 쓰레드(ParameterizedThreadStart, ThreadStart 델리게이트)

홈 > 공유팁! > 프로그램 관련
프로그램 관련

C# 멀티 쓰레드(ParameterizedThreadStart, ThreadStart 델리게이트)

꽁스짱 0 916

C# 멀티 쓰레드(ParameterizedThreadStart, ThreadStart 델리게이트)

 

ParameterizedThreadStart 델리게이트 모양은 아래와 같다.

public delegate void ParameterizedThreadStart(object obj);

한 개의 파라미터를 object 형식으로 전달하기 때문에 여러 개의 파라미터를 전달하기 위해서는 클래스나 구조체를 만들거나 배열 등을 이용하여 전달할 수 있다. 파라미터 전달은 Thread.Start() 메소드를 호출할 때 전달한다.

참고로 ThreadStart를 이용해 파라미터를 전달하는 방법은 일단 델리게이트 메소드는 파라미터를 받아들이지 않으므로 그 메소드 안에서 다른 메소드를 호출하면서 파라미터를 전달할 수 있다.

1부터 50까지의 합을 5개의 쓰레드에 나누어서 실행하고자 한다.

첫번째 쓰레드는 1~10 까지의 합을, 두번째 쓰레드는 11~20 까지의 합을.... 다셋번째 쓰레드는

41~50 사이의 합을 구하는데 아래 두 방법으로 프로그램을 작성하세요.

- ParameterizedThreadStart 델리게이트를 이용하여 작성하세요.

- ThreadStart 델리게이트를 이용하여 작성하세요

1. ParameterizedThreadStart 델리게이트를 이용하여 작성

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace ConsoleApplication2

{

class Program

{

static int mysum = 0;

static void Sum(object n)

{

int sum = 0;

int[] number = (int[])n;

for (int i = number[0]; i <= number[1]; i++)

{

sum += i;

}

mysum += sum;

}

static void Main(string[] args)

{

Thread t1 = new Thread(new ParameterizedThreadStart(Sum));

Thread t2 = new Thread(new ParameterizedThreadStart(Sum));

Thread t3 = new Thread(new ParameterizedThreadStart(Sum));

Thread t4 = new Thread(new ParameterizedThreadStart(Sum));

Thread t5 = new Thread(new ParameterizedThreadStart(Sum));

t1.Start(new int[] { 1, 10 }); t2.Start(new int[] { 11, 20 });

t3.Start(new int[] { 21, 30 }); t4.Start(new int[] { 31, 40 });

t5.Start(new int[] { 41, 50 });

t1.Join(); t2.Join(); t3.Join(); t4.Join(); t5.Join();

Console.Write("1부터50까지의 합은{0}::", mysum);

}

}

}

2. ThreadStart 델리게이트를 이용하여 작성

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace ConsoleApplication3

{

class Program

{

static int mysum = 0;

static void Sum(object n)

{

int sum = 0;

int[] number = (int[])n;

for (int i = number[0]; i <= number[1]; i++)

{

sum += i;

}

mysum += sum;

}

static void Main(string[] args)

{

Thread t1 = new Thread(new ThreadStart(() => Sum(new int[] { 1, 10 })));

0 Comments
제목