C# 멀티 쓰레드(ParameterizedThreadStart, ThreadStart 델리게이트)
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
|