스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로 하나의 프로세스는 여러 개의 스레드가 독립적으로 실행될 수 있다.
도로가 프로세스라면 스레드는 차선
System.Threading namespace
주요 기능 | 내용 |
Interlocked | 멀티스레드 기반에서 스레드 간에 공윧되는 객체를 동기화한다. |
Monitor | locks, wait, signals를 통해서 스레드 객체를 동기화 한다. |
Mutex | 2개 이상의 스레드가 공유자원에 동시에 접근할 때 동기화한다. |
Thread | 스레드를 생성, 제어하는 기능을 제공한다. |
ThreadPool | 해당 프로세스내의 스레드를 관리하는 기능을 제공한다. |
Timer | 설정한 시간 간격으로 메소드를 실행하도록 기능을 제공한다. |
ThreadStart | 스레드에서 실행되는 메소드를 등록하는 델리게이트이다. |
WaitCallback | 스레드풀에 의해 실행될 콜백 메소드를 나타내는 델리게이트이다. |
TimerCallback | 타이머에 의해 호출되는 메소드를 등록하는 델리게이트이다. |
ThreadStart | 스레드의 상태를 지정한다. |
ThreadPriority | 스레드의 우선순위를 지정한다. |
Thread 클래스
public sealed class Thread
Thread 클래스는 상속이 금지되어 있어 스레드를 사용하기 위해서는 Thread클래스의 객체를 생성하는 방법을 이용해야 한다.
Thread 클래스의 주요 메소드 | |
메소드 | 내용 |
Abort() | 이 메소드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작한다. |
Join() | 스레드가 종료될 때까지 호출 스레드를 차단한다. |
Resume() | 일시중지된 스레드를 다시 시작한다. |
Sleep() | 지정된 시간동안 현재 스레드를 일시중지한다. |
Start() | 현재 스레드 객체를 동작(Running)상태로 변경한다. |
Suspend() | 현재 동작하고 있는 스레드를 일시중지한다. |
ThreadStart 델리게이트
public delegate void ThreadStart();
스레드로 사용할 메소드를 참조할 수 있게 해 주는 델리게이트.
스레드 생성하기
Thread thread = new Thread(new ThreadStart(ThreadFunction));
스레드 제어
public static void Sleep(int millisecondsTimeout);
Sleep(1000) 메소드를 사용하면 대기상태로 만들며 지정한 시간(ms)이 지나면 자동으로 실행상태로 전환된다.
public void Suspend();
public void Resume();
Suspend() 메소드를 사용하면 스레드를 대기상태로 만들며 Join과 달리 Resume() 메소드를 호출해 주어야 실행상태로 전환된다.
스레드 종료하기
스레드는 ThreadStart델리게이트에 등록되어 있는 메소드가 종료되면 자동으로 종료된다.
public void Join();
Join() 메소드를 사용하면 스레드가 다 실행 될 때 까지 기다렸다가 종료시키므로 매우 안정적이다.
하지만 무한루프를 사용중인 경우 적용하기 어렵다는 문제가 있다.
스레드의 강제 종료
public void Abort();
Abort() 메서드가 호출되면 ThreadAbortException 예외를 발생시켜 스레드를 종료하게 만든다.
해당 스레드가 어떤 동작중인지와 관계없이 CPU의 사용권을 빼앗아 강제로 종료시키기 때문에 어떤 부작용이 발생할지 알 수 없다. 때문에 극단적인 상황이 아니면 Abort() 사용을 권장하지 않는다.
반응형
'Programming > C#' 카테고리의 다른 글
[C#] Thread(3) 스레드 동기화 (1) | 2024.09.28 |
---|---|
[C#] Thread(2) 스레드의 상태 (0) | 2024.09.28 |
[C#] event (1) | 2024.09.28 |
[C#] Types (0) | 2024.09.28 |
[C#] const보다는 readonly가 좋다 (1) | 2024.09.28 |