[동영상]C# 스레드(Thread),HelloWorld,ThreadStart,ParameterizedThreadStart

C# Thread
HelloWorld
ThreadStart
ParameterizedThreadStart
C# 스레드(Thread)
- 스레드는 하나의 프로세스(실행 중인 프로그램) 내에 존재하는 순차적인 제어의 흐름을 두기 위해 사용한다. 즉 프로세스는 하나 이상의 스레드로 이루어 진다.
- 각 스레드는 코드, 데이터, 힙 영역은 공유하며, Stack Frame은 별도로 할당되는데 이를 Thread Stack이라하며 Thread Stack은 메소드 단위로 분리되어 할당되며 실행이 끝나면 Stack Frame은 사라진다.
- 멀티 스레드가 제대로 동작하기 위해서는 CPU가 여러 개 있어야 한다. 단일 CPU를 사용하게 되면 CPU는 한 번에 하나의 스레드를 사용한다. 만약 멀티 스레드로 프로그램이 실행되는 경우라면 CPU의 사용 시간을 나누어서 각각의 스레드에게 주기 때문에 단일 쓰레드와 별차이가 없다.
- C#에서 스레드를 만들기 위해서는 기 정의된 Thread 클래스와 ThreadStart, ParameterizedThreadStart 델리게이트를 이용하면 된다.
public delegate void ParameterizedThreadStart(object obj); 한 개의 파라미터를 object 형식으로 전달하기 때문에 여러 개의 파라미터를 전달하기 위해서는 클래스나 구조체를 만들거나 배열 등을 이용하여 전달할 수 있다. 파라미터 전달은 Thread.Start() 메소드를 호출할 때 전달한다. public delegate void ThreadStart(); 스레드가 실행시킬 메소드가 파라미터를 받아들이지 않는 형태이며, ThreadStart를 이용해 파라미터를 전달하는 방법은 ThreadStart 델리게이트가 처다보는 메소드는 파라미터를 받아들이지 않으므로 그 메소드 안에서 다른 메소드를 호출하면서 파라미터를 전달할 수 있다. |
- C#에서 스레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의되어 있다.
[실습]
1부터 50까지의 합을 5개의 쓰레드에 나누어서 실행하고자 한다.
첫번째 쓰레드는 1~10 까지의 합을, 두번째 쓰레드는 11~20 까지의 합을.... 다섯번째 쓰레드는
41~50 사이의 합을 구하는데 아래 두 방법으로 프로그램을 작성하세요.
- ParameterizedThreadStart 델리게이트를 이용하여 작성하세요.
- ThreadStart 델리게이트를 이용하여 작성하세요
1. ParameterizedThreadStart 델리게이트를 이용하여 작성
using System;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static int mysum = 0;
static void DoSomething(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(DoSomething));
Thread t2 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t3 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t4 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t5 = new Thread(new ParameterizedThreadStart(DoSomething));
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.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 })));
Thread t2 = new Thread(new ThreadStart(() => Sum(new int[] { 11, 20 })));
Thread t3 = new Thread(new ThreadStart(() => Sum(new int[] { 21, 30 })));
Thread t4 = new Thread(new ThreadStart(() => Sum(new int[] { 31, 40 })));
Thread t5 = new Thread(new ThreadStart(() => Sum(new int[] { 41, 50 })));
t1.Start(); t2.Start(); t3.Start(); t4.Start(); t5.Start();
t1.Join(); t2.Join(); t3.Join(); t4.Join(); t5.Join();
Console.WriteLine(mysum);
}
}
}
#시샵동영상, #스레드, #Thread, #HelloWorld, #ThreadStart,#ParameterizedThreadStart, #닷넷쓰레드, #쓰레드, #닷넷동영상, #닷넷교육, #시샵교육, 시샵동영상, 스레드, Thread, HelloWorld, ThreadStart,ParameterizedThreadStart, 닷넷쓰레드, 쓰레드, 닷넷동영상, 닷넷교육, 시샵교육,
#시샵동영상, #스레드, #Thread, #HelloWorld, #ThreadStart, #ParameterizedThreadStart, #닷넷쓰레드, #쓰레드, #닷넷동영상, #닷넷교육, #시샵교육, 시샵동영상, 스레드, Thread, HelloWorld, ThreadStart, ParameterizedThreadStart, 닷넷쓰레드, 쓰레드, 닷넷동영상, 닷넷교육, 시샵교육,