C#에서 현재 관리되는(managed) 스레드의 고유 식별자를 확인하려면 Thread.ManagedThreadId 속성을 사용하면 됩니다. 이 속성은 해당 스레드에 할당된 고유한 정수 값을 반환하며, 스레드를 추적하거나 디버깅할 때 유용하게 활용됩니다.
예제 1: 새 스레드와 스레드 풀(ThreadPool) 사용
아래 예제에서는 새로운 스레드를 생성하고, 스레드 풀에 작업 항목을 등록한 후 각각의 관리되는 스레드 ID와 스레드 풀 여부를 출력합니다.
using System;
using System.Threading;
public class Demo {
public static void Main(){
Thread thread = new Thread(new ThreadStart(demo1));
ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
}
public static void demo1(){
Thread.Sleep(2000);
}
public static void demo2(object stateInfo){
Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
ManagedThreadId = 3 Thread belongs to managed thread pool? = True
여기서 IsThreadPoolThread 속성이 True로 출력된 것은, 해당 코드가 스레드 풀에서 실행 중인 스레드 위에서 동작했음을 의미합니다.
예제 2: 일반 스레드만 사용하는 경우
이번에는 스레드 풀을 사용하지 않고 직접 생성한 스레드만으로 동일한 정보를 확인해 보겠습니다.
using System;
using System.Threading;
public class Demo {
public static void Main(){
Thread thread = new Thread(new ThreadStart(demo));
Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
thread.Start();
}
public static void demo(){
Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
}
}실행 결과
실행 결과는 다음과 같습니다.
ManagedThreadId = 3 Thread belongs to managed thread pool? = False
직접 생성한 스레드이므로 IsThreadPoolThread 값이 False로 출력됩니다.
정리
- Thread.ManagedThreadId: 현재 관리되는 스레드의 고유 식별자를 정수형으로 반환합니다.
- Thread.CurrentThread.IsThreadPoolThread: 현재 스레드가 스레드 풀에 속해 있는지 여부를 나타냅니다.
두 속성을 함께 활용하면 멀티스레딩 환경에서 스레드의 출처와 ID를 쉽게 파악할 수 있어 디버깅과 로깅에 매우 유용합니다.