본문 바로가기

C#

C# ThreadLocal<T>로 스레드별 데이터 관리

멀티스레드 환경에서 각 스레드가 독립적인 데이터를 가져야 할 때가 많습니다. 이때 ThreadLocal<T>를 사용하면 스레드별로 고유한 데이터를 안전하게 관리할 수 있습니다.

1. ThreadLocal<T> 개념

ThreadLocal<T>는 각 스레드마다 별도의 값이 생성되도록 해주는 제네릭 클래스입니다. 스레드마다 다른 인스턴스를 저장하고 읽을 수 있어 동기화 없이도 안전하게 값을 다룰 수 있습니다.

2. 기본 사용법

ThreadLocal<int> threadLocalData = new ThreadLocal<int>(() => 0);

var thread = new Thread(() => {
    threadLocalData.Value = Thread.CurrentThread.ManagedThreadId;
    Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} has value: {threadLocalData.Value}");
});

thread.Start();
thread.Join();

위 예제에서 스레드별로 threadLocalData.Value는 독립된 값을 가지게 됩니다.

3. 사용 시 주의 사항

  • 스레드가 닫히면 해당 스레드의 ThreadLocal 값도 사라집니다.
  • 메모리 누수를 막기 위해 필요 없을 때는 Dispose를 호출하는 것이 좋습니다.

간단하지만 멀티스레드 환경에서 로컬 데이터를 안전하게 관리할 수 있는 ThreadLocal<T>를 적극 활용해보세요.