[Thread Book #5] 스레드 상태 조사
스레드가 가질 수 있는 상태를 설명하며 스레드가 이제 시작됐는지의 여부나 스레드가 봉쇄 상태인지의 여부에 관한 정보를 얻을때 유용하다.
스레드는 독립적으로 실행되므로 언제든지 상태가 바뀔수 있음에 주목하길 바란다.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting program...");
Thread t = new Thread(PrintNumbersWithStatus);
Thread t2 = new Thread(DoNothing);
Console.WriteLine(t.ThreadState.ToString());
t2.Start();
t.Start();
for (int i = 1; i < 30; i++)
{
Console.WriteLine(t.ThreadState.ToString());
}
Thread.Sleep(TimeSpan.FromSeconds(6));
t.Abort();
Console.WriteLine("A thread has been aborted");
Console.WriteLine(t.ThreadState.ToString());
Console.WriteLine(t2.ThreadState.ToString());
}
static void DoNothing()
{
Thread.Sleep(TimeSpan.FromSeconds(2));
}
static void PrintNumbersWithStatus()
{
Console.WriteLine("Starting...");
Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());
for (int i = 1; i < 10; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine(i);
}
}
}
다른 두 스레드를 정의한 메인 프로그램이 시작하면 한 스레드는 중단되고,다른 스레드는 성공적으로 실행된다.
C#의 열거형인 스레드 상태는 Thread 객체의 ThreadState 속성에 있다.
첫 번째 스레드는 ThreadState.Unstarted 상태를 갖는다.
그러면 실행중이라고 가정할때 주기를 30번 반복하는 동안에 스레드는 자신의 상태를 ThreadState.Running 에서 ThreadState.WaitSleepJoin으로 바꾼다.
-
현재 Thread 객체는 Thread.CurrentTherad 정적 속성을 통해 항상 접근할 수 있음에 주목하길 바란다.
만약에 발생하지 않았다면 반복 횟수를 늘리면 된다.그런 후에 첫 번째 스레드를 중단하면 ThreadState.Aborted 상태를 가짐을 지금 볼수 있다.
프로그램이 ThreadState.AbortRequested 상태를 출력하는 것도 역시 가능하며 두 스레드 동기화의 복잡도를 잘 보여준다.
프로그램에서 스레드 중단을 사용하지 말아야함을 명심해야한다. 여기에서만 스레드 상태를 보여줄 뿐이다
끝으로 두 번째 스레드인 T2가 성공적으로 끝났음을 볼수 있으며 지금은 ThreadState.Stopped 상태를 갖는다.
여러 다른 스레드 상태가 있지만, 부분적으로 더 이상 사용되지 않으며 조사했던 것은 어느 정도 유용하지 않다.
출처 : C# 멀티스레드 프로그래밍 -유진 아가포노프 -
'[2-3]operating system > [2-3.2]Thread' 카테고리의 다른 글
[Thread Book #4 ] 스레드 중단 (0) | 2020.06.13 |
---|---|
스레드 동기화 (0) | 2020.06.13 |
스레드의 파라미터 전달 (0) | 2020.05.13 |
스레드 우선순위 (0) | 2020.05.06 |
Using WaitingBar with a Background Worker | UI for WinForms Documentation | Telerik UI for WinForms (0) | 2020.02.18 |
댓글