본문 바로가기
Programming/C#

[C#] Thread(1) 스레드의 개념

by devfactory 2024. 9. 28.

스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로 하나의 프로세스는 여러 개의 스레드가 독립적으로 실행될 수 있다.

도로가 프로세스라면 스레드는 차선

 

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