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

C#에서 현재 관리되는 스레드의 고유 식별자(ManagedThreadId) 가져오는 방법

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를 쉽게 파악할 수 있어 디버깅과 로깅에 매우 유용합니다.