TLS
업데이트: 2007년 11월
TLS(스레드 로컬 저장소)는 지정된 다중 스레드 프로세스의 각 스레드에서 스레드별 데이터를 저장할 위치를 할당할 수 있는 방법입니다. 동적으로 바인딩된(런타임) 스레드별 데이터는 TLS API(TlsAlloc, TlsGetValue, TlsSetValue 및 TlsFree)에 의해 지원됩니다. Win32와 Visual C++ 컴파일러는 기존 API 구현뿐만 아니라 정적으로 바인딩된(로드 시간) 스레드별 데이터도 지원합니다.
TLS를 위한 API 구현
TLS는 컴파일러는 물론 Win32 API 레이어를 통해 구현됩니다. 자세한 내용은 TlsAlloc, TlsGetValue, TlsSetValue 및 TlsFree에 대한 Win32 API 설명서를 참조하십시오.
Visual C++ 컴파일러에는 API 레이어를 사용하지 않고 TLS 작업을 자동화하는 키워드가 포함되어 있습니다. 이 구문은 다음 단원인 TLS를 위한 컴파일러 구현에서 설명합니다.
TLS를 위한 컴파일러 구현
TLS를 지원하기 위해 C 및 C++ 언어에 thread라는 새로운 특성이 추가되었으며 Visual C++ 컴파일러에서 이 특성을 지원합니다. 이 특성은 이전 단원에서 설명한 대로 확장 저장소 클래스 한정자입니다. __declspec 키워드를 사용하여 thread 변수를 선언합니다. 예를 들어, 다음 코드는 정수 스레드 로컬 변수를 선언한 다음 값으로 초기화합니다.
__declspec( thread ) int tls_i = 1;