스레드 로컬 저장소 (TLS)는 OS에서 관리합니다. 커널의 모든 스레드 객체는 TLS 슬롯의 로컬 배열을 포함합니다. 런타임에 앱의 코드는 컴파일러에 따라 __thread
또는 __declspec(thread)
으로 선언 된 변수와 같이 필요로하는 각 TLS 변수에 대해 을 호출하여 TLS 배열에 사용 가능한 색인을 예약 할 수 있습니다. 그런 다음 각 스레드는 TlsGetValue()
및 TlsSetValue()
을 사용하여 해당 인덱스의 호출 스레드의 TLS 배열에 저장된 값을 읽거나 쓸 수 있습니다. TLS를 사용하면 앱에서 TlsFree()
을 호출하여 예약 된 색인을 해제 할 수 있습니다.
예를 들어, 응용 프로그램을 시작할 때, 응용 프로그램은 이후, 주어진 스레드가 TLS 인덱스 0 TlsSetValue()
를 호출 할 수 있습니다 실행하는 각 스레드 내부 TLS 인덱스 0을 예약 한 번 TlsAlloc()
호출하고 그 값은 특정 로컬로 저장됩니다 따라서 다른 스레드에 대한 TLS 인덱스 0에 저장된 값은 영향을받지 않습니다.
은 자세한 내용은 MSDN을 참조 : 스레드 내에서 실행
Thread Local Storage
섬유를. 따라서 같은 스레드에서 실행되는 여러 개의 광섬유가 해당 스레드에 대해 동일한 TLS 배열을 공유합니다. 하나의 광섬유가 TLS 인덱스 0에서 값을 설정하면 동일한 스레드에서 실행중인 모든 광섬유가 영향을받습니다. 파이버 안전 TLS는 파이버가 수명 기간 동안 한 스레드에서 다른 스레드로 점프하는 경우 파이버가 TLS 정보를 캐싱하지 못하게하는 컴파일러 최적화입니다.
TLS의 전체 설명을 보려면이 링크 (내 기사 아님)를 확인하십시오. http://bryanpendleton.blogspot.com/2010/11/ken-johnsons-exposition-of-thread-local.html – HerrJoebob