Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 스레드(Thread) 클래스의 주요 메서드 총정리


스레드(Thread) 클래스란?

.NET의 System.Threading.Thread 클래스는 멀티스레드 프로그래밍을 구현할 때 사용되는 핵심 클래스로, 스레드의 생성·실행·제어·종료와 관련된 다양한 메서드를 제공합니다.

그중에서도 가장 널리 사용되는 메서드는 Start, Sleep, Join, Abort입니다. 아래 표에서 Thread 클래스가 제공하는 전체 메서드 목록과 각 메서드의 역할을 확인할 수 있습니다.

Thread 클래스 메서드 목록

번호메서드 및 설명
1

public void Abort()

호출된 스레드에서 ThreadAbortException 예외를 발생시켜 해당 스레드의 종료 절차를 시작합니다. 이 메서드를 호출하면 일반적으로 해당 스레드는 종료됩니다.

2

public static LocalDataStoreSlot AllocateDataSlot()

모든 스레드에 이름 없는 데이터 슬롯을 할당합니다. 더 나은 성능을 위해서는 이 메서드 대신 ThreadStaticAttribute 특성으로 표시된 필드를 사용하는 것이 좋습니다.

3

public static LocalDataStoreSlot AllocateNamedDataSlot(string name)

모든 스레드에 지정한 이름의 데이터 슬롯을 할당합니다. 성능 향상을 위해서는 ThreadStaticAttribute 특성이 적용된 필드 사용을 권장합니다.

4

public static void BeginCriticalRegion()

호스트에게 앞으로 진입하는 코드 영역에서 스레드 중단(Abort)이나 처리되지 않은 예외가 발생할 경우, 같은 애플리케이션 도메인 내의 다른 작업에도 영향을 미칠 수 있음을 알립니다.

5

public static void BeginThreadAffinity()

관리 코드(managed code)가 현재 물리적 운영체제 스레드의 식별자에 의존하는 명령어를 실행하려고 함을 호스트에게 알립니다.

6

public static void EndCriticalRegion()

호스트에게 앞으로 진입하는 코드 영역에서는 스레드 중단이나 처리되지 않은 예외의 영향이 현재 작업에 한정됨을 알립니다.

7

public static void EndThreadAffinity()

관리 코드가 현재 물리적 운영체제 스레드의 식별자에 의존하는 명령어 실행을 마쳤음을 호스트에게 알립니다.

8

public static void FreeNamedDataSlot(string name)

프로세스 내의 모든 스레드에서 지정한 이름과 슬롯 간의 연결을 해제합니다. 성능 향상을 위해서는 ThreadStaticAttribute 특성이 적용된 필드 사용을 권장합니다.

9

public static Object GetData(LocalDataStoreSlot slot)

현재 스레드의 현재 도메인 내에서 지정된 슬롯에 저장된 값을 조회합니다. 성능 향상을 위해서는 ThreadStaticAttribute 특성이 적용된 필드 사용을 권장합니다.

10

public static AppDomain GetDomain()

현재 스레드가 실행 중인 애플리케이션 도메인(AppDomain)을 반환합니다.

11

public static int GetDomainID()

고유한 애플리케이션 도메인 식별자(ID)를 반환합니다.

12

public static LocalDataStoreSlot GetNamedDataSlot(string name)

지정한 이름의 데이터 슬롯을 찾아 반환합니다. 성능 향상을 위해서는 ThreadStaticAttribute 특성이 적용된 필드 사용을 권장합니다.

13

public void Interrupt()

WaitSleepJoin 상태에 있는 스레드를 중단(interrupt)합니다.

14

public void Join()

대상 스레드가 종료될 때까지 호출한 스레드를 차단(blocking)하며, 이때 표준 COM 및 SendMessage 펌핑은 계속 수행됩니다. 이 메서드는 여러 오버로드 형태를 제공합니다.

15

public static void MemoryBarrier()

메모리 접근을 다음과 같이 동기화합니다. 현재 스레드를 실행 중인 프로세서는 MemoryBarrier 호출 이전의 메모리 접근이 호출 이후의 메모리 접근보다 나중에 실행되도록 명령어를 재정렬할 수 없습니다.

16

public static void ResetAbort()

현재 스레드에 대해 요청된 Abort를 취소합니다.

17

public static void SetData(LocalDataStoreSlot slot, Object data)

현재 실행 중인 스레드의 해당 도메인에서 지정된 슬롯에 데이터를 설정합니다. 성능 향상을 위해서는 ThreadStaticAttribute 특성이 적용된 필드 사용을 권장합니다.

18

public void Start()

스레드의 실행을 시작합니다.

19

public static void Sleep(int millisecondsTimeout)

지정된 시간(밀리초) 동안 스레드를 일시 정지시킵니다.

20

public static void SpinWait(int iterations)

iterations 매개변수로 지정된 횟수만큼 스레드가 대기하도록 합니다.


자주 사용되는 핵심 메서드

실무에서 가장 많이 쓰이는 네 가지 메서드는 다음과 같습니다.

Start() – 스레드를 생성하고 실행을 시작합니다.
Sleep() – 지정한 시간 동안 현재 스레드를 일시 정지합니다.
Join() – 다른 스레드의 작업이 끝날 때까지 현재 스레드를 대기시킵니다.
Abort() – 강제로 스레드를 종료시킵니다.

참고 사항

Abort() 메서드는 .NET Framework에서만 지원되며, .NET Core 및 .NET 5 이상에서는 NotSupportedException이 발생합니다. 최신 환경에서는 CancellationToken이나 Task 기반의 안전한 종료 방식을 사용하는 것이 권장됩니다. 또한 데이터 슬롯 관련 메서드보다는 ThreadStaticAttribute 또는 ThreadLocal<T>를 사용하는 것이 성능과 유지보수 측면에서 더 유리합니다.