반응형
Thread Local Storage (TLS) 설명
Thread Local Storage (TLS)는 각 스레드가 자신만의 데이터 복사본을 가질 수 있게 하는 메커니즘입니다.
TLS를 사용하면, 각 스레드는 다른 스레드와 데이터를 공유하지 않고,
각 스레드에 대해 고유한 데이터 인스턴스를 유지할 수 있습니다.
이 방식은 멀티스레딩 환경에서 데이터 경쟁 조건을 방지하고 스레드 안전성을 높이는 데 유용합니다.
C#에서는 ThreadLocal<T> 클래스를 통해 TLS를 구현할 수 있습니다.
ThreadLocal<T>는 제네릭 타입으로, 스레드마다 별도의 값을 가질 수 있는 변수를 생성합니다.
C# 예시 코드
다음은 C#에서 ThreadLocal<T>를 사용하는 간단한 예제입니다
using System;
using System.Threading;
public class Program
{
// ThreadLocal 변수 선언 및 초기화
private static ThreadLocal<int> _threadLocalNumber = new ThreadLocal<int>(() =>
{
// 초기값 설정. 여기서는 스레드의 ManagedThreadId를 사용합니다.
return Thread.CurrentThread.ManagedThreadId;
});
public static void Main()
{
// 스레드를 생성하고 시작합니다.
Thread thread1 = new Thread(ShowThreadLocalStorage);
thread1.Start();
Thread thread2 = new Thread(ShowThreadLocalStorage);
thread2.Start();
ShowThreadLocalStorage(); // 메인 스레드에서도 실행
thread1.Join();
thread2.Join();
}
private static void ShowThreadLocalStorage()
{
Console.WriteLine($"Thread ID: {Thread.CurrentThread.ManagedThreadId}, ThreadLocal value: {_threadLocalNumber.Value}");
// ThreadLocal 값 변경
_threadLocalNumber.Value = _threadLocalNumber.Value * 10;
// 변경된 값을 출력
Console.WriteLine($"Thread ID: {Thread.CurrentThread.ManagedThreadId}, Updated ThreadLocal value: {_threadLocalNumber.Value}");
}
}
이 예제에서는 각 스레드가 자신의 ManagedThreadId를 기반으로 초기화된 ThreadLocal<int> 변수를 가지고 있습니다. ShowThreadLocalStorage 메서드는 이 값을 출력하고, 그 다음에 이 값을 10배 증가시킵니다.
주목할 점은 각 스레드가 ThreadLocal<T> 인스턴스의 고유한 복사본을 가지고 있으므로,
한 스레드에서 값을 변경해도 다른 스레드에는 영향을 주지 않는다는 것입니다.
반응형
LIST
'멀티쓰레드 프로그래밍' 카테고리의 다른 글
ReaderWriterLock (0) | 2024.02.27 |
---|---|
ManualResetEvent (0) | 2024.02.27 |
AutoResetEvent (0) | 2024.02.26 |
Context Switching (0) | 2024.02.26 |
SpinLock (0) | 2024.02.23 |