스레드(Thread)는 경량 프로세스로, 하나의 프로그램 내에서 여러 작업을 동시에 수행할 수 있게 해주는 실행 단위입니다. 현대 운영체제가 동시성(Concurrency) 프로그래밍을 구현하는 가장 대표적인 방식이 바로 스레드를 활용하는 것입니다.
C#에서는 System.Threading 네임스페이스의 Thread 클래스를 통해 스레드를 생성하고 제어할 수 있습니다. 이 글에서는 Thread 클래스에서 자주 사용되는 핵심 속성과 메서드를 정리해 소개합니다.
Thread 클래스의 주요 속성
| 번호 | 속성 및 설명 |
|---|---|
| 1 | CurrentContext 현재 스레드가 실행 중인 컨텍스트(Context)를 가져옵니다. |
| 2 | CurrentCulture 현재 스레드의 문화권(Culture) 정보를 가져오거나 설정합니다. |
| 3 | CurrentPrincipal 역할 기반(Role-based) 보안을 위해 스레드의 현재 보안 주체(Principal)를 가져오거나 설정합니다. |
| 4 | CurrentThread 현재 실행 중인 스레드를 가져옵니다. |
| 5 | CurrentUICulture 리소스 관리자(Resource Manager)가 런타임에 문화권별 리소스를 조회할 때 사용하는 현재 문화권을 가져오거나 설정합니다. |
| 6 | ExecutionContext 현재 스레드의 다양한 컨텍스트 정보를 담고 있는 ExecutionContext 객체를 가져옵니다. |
| 7 | IsAlive 현재 스레드의 실행 상태를 나타내는 값을 가져옵니다. |
| 8 | IsBackground 해당 스레드가 백그라운드 스레드인지 여부를 나타내는 값을 가져오거나 설정합니다. |
Thread 클래스의 주요 메서드
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | public void Abort() 호출된 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 절차를 시작합니다. 이 메서드를 호출하면 일반적으로 해당 스레드가 종료됩니다. 참고: .NET Core 및 .NET 5 이상에서는 지원되지 않으며, 플랫폼에서 PlatformNotSupportedException이 발생합니다. |
| 2 | public static LocalDataStoreSlot AllocateDataSlot() 모든 스레드에 이름 없는 데이터 슬롯(Data Slot)을 할당합니다. 더 나은 성능을 위해서는 ThreadStaticAttribute 특성이 적용된 필드를 사용하는 것이 권장됩니다. |
| 3 | public static LocalDataStoreSlot AllocateNamedDataSlot(string name) 모든 스레드에 지정한 이름의 데이터 슬롯을 할당합니다. 마찬가지로 성능을 고려한다면 ThreadStaticAttribute 특성이 적용된 필드를 사용하는 것이 좋습니다. |
| 4 | public static void BeginCriticalRegion() 호스트(Host)에게 스레드 중단(Abort)이나 처리되지 않은 예외가 애플리케이션 도메인 내의 다른 작업까지 위협할 수 있는 코드 영역에 진입함을 알립니다. |
| 5 | public static void BeginThreadAffinity() 관리 코드(Managed Code)가 현재 물리적 운영체제 스레드의 식별자에 의존하는 명령을 실행하려고 함을 호스트에게 알립니다. |
| 6 | public static void EndCriticalRegion() 스레드 중단이나 처리되지 않은 예외의 영향이 현재 작업에만 국한되는 코드 영역에 진입함을 호스트에게 알립니다. |
| 7 | public static void EndThreadAffinity() 관리 코드가 현재 물리적 운영체제 스레드의 식별자에 의존하는 명령 실행을 마쳤음을 호스트에게 알립니다. |
마무리
Thread 클래스는 멀티스레딩 프로그래밍의 기본이 되는 요소입니다. 속성을 활용하면 스레드의 상태와 환경을 확인·제어할 수 있고, 메서드를 활용하면 스레드의 생명주기를 관리할 수 있습니다. 최신 .NET 환경에서는 Task와 async/await 같은 비동기 패턴이 권장되지만, 스레드의 동작 원리를 이해하는 것은 여전히 안정적인 애플리케이션을 개발하는 데 중요한 기반이 됩니다.