다음을 통해 공유


스레드 로컬 스토리지

프로세스의 모든 스레드는 해당 가상 주소 공간을 공유합니다. 함수의 지역 변수는 함수를 실행하는 각 스레드에 고유합니다. 그러나 정적 변수와 전역 변수는 프로세스의 모든 스레드에서 공유됩니다. TLS( 스레드 로컬 스토리지 )를 사용하면 프로세스가 전역 인덱스를 사용하여 액세스할 수 있는 각 스레드에 대해 고유한 데이터를 제공할 수 있습니다. 한 스레드는 인덱스를 할당합니다. 이 인덱스는 다른 스레드에서 인덱스와 연결된 고유 데이터를 검색하는 데 사용할 수 있습니다.

상수 TLS_MINIMUM_AVAILABLE 각 프로세스에서 사용할 수 있는 최소 TLS 인덱스 수를 정의합니다. 이 최소값은 모든 시스템에 대해 64 이상이어야 합니다. 프로세스당 최대 인덱스 수는 1,088개입니다.

스레드를 만들 때 시스템은 NULL로 초기화된 TLS에 대한 LPVOID 값 배열을 할당합니다. 인덱스를 사용하려면 먼저 스레드 중 하나에서 인덱스를 할당해야 합니다. 각 스레드는 TLS 인덱스의 데이터를 배열의 TLS 슬롯 에 저장합니다. 인덱스와 연결된 데이터가 LPVOID 값에 맞는 경우 TLS 슬롯에 직접 데이터를 저장할 수 있습니다. 그러나 이러한 방식으로 많은 수의 인덱스를 사용하는 경우 별도의 스토리지를 할당하고, 데이터를 통합하고, 사용 중인 TLS 슬롯 수를 최소화하는 것이 좋습니다.

다음 다이어그램은 TLS의 작동 방식을 보여 줍니다. 스레드 로컬 스토리지 사용을 보여 주는 코드 예제는 스레드 로컬 스토리지 사용을 참조하세요.

TL S 프로세스의 작동 방식을 보여 주는 다이어그램

프로세스에는 스레드 1과 스레드 2의 두 스레드가 있습니다. TLS, gdwTlsIndex1 및 gdwTlsIndex2와 함께 사용할 두 개의 인덱스를 할당합니다. 각 스레드는 데이터를 저장할 두 개의 메모리 블록(각 인덱스에 대해 하나씩)을 할당하고 해당 TLS 슬롯에 이러한 메모리 블록에 대한 포인터를 저장합니다. 인덱스와 연결된 데이터에 액세스하기 위해 스레드는 TLS 슬롯에서 메모리 블록에 대한 포인터를 검색하여 lpvData 지역 변수에 저장합니다.

DLL(동적 연결 라이브러리)에서 TLS를 사용하는 것이 이상적입니다. 예제는 동적 링크 라이브러리에서 스레드 로컬 스토리지 사용을 참조하세요.

스레드 로컬 스토리지(Visual C++)

스레드 로컬 스토리지 사용

동적 링크 라이브러리에서 스레드 로컬 스토리지 사용