Dela via


Lokal trådlagring

Alla trådar i en process delar dess virtuella adressutrymme. De lokala variablerna för en funktion är unika för varje tråd som kör funktionen. De statiska och globala variablerna delas dock av alla trådar i processen. Med trådlokal lagring (TLS) kan du ange unika data för varje tråd som processen kan komma åt med hjälp av ett globalt index. En tråd allokerar indexet, som kan användas av de andra trådarna för att hämta de unika data som är associerade med indexet.

Konstanten TLS_MINIMUM_AVAILABLE definierar det minsta antalet TLS-index som är tillgängliga i varje process. Detta minimum är garanterat minst 64 för alla system. Det maximala antalet index per process är 1 088.

När trådarna skapas allokerar systemet en matris med LPVOID- värden för TLS, som initieras till NULL. Innan ett index kan användas måste det allokeras av någon av trådarna. Varje tråd lagrar sina data för ett TLS-index i en TLS-plats i matrisen. Om data som är associerade med ett index får plats i ett LPVOID- värde kan du lagra data direkt i TLS-facket. Men om du använder ett stort antal index på det här sättet är det bättre att allokera separat lagring, konsolidera data och minimera antalet TLS-platser som används.

Följande diagram visar hur TLS fungerar. Ett kodexempel som illustrerar användningen av trådlokal lagring finns i Using Thread Local Storage.

diagram som visar hur T L S-processen fungerar.

Processen har två trådar, Tråd 1 och Tråd 2. Det allokerar två index för användning med TLS, gdwTlsIndex1 och gdwTlsIndex2. Varje tråd allokerar två minnesblock (ett för varje index) där du kan lagra data och lagrar pekarna till dessa minnesblock i motsvarande TLS-platser. För att komma åt data som är associerade med ett index hämtar tråden pekaren till minnesblocket från TLS-facket och lagrar den i den lokala variabeln lpvData.

Det är idealiskt att använda TLS i ett DLL-bibliotek (dynamic-link library). Ett exempel finns i Using Thread Local Storage in a Dynamic Link Library.

lokal trådlagring (Visual C++)

Med lokal trådlagring

Använda lokal trådlagring i ett dynamiskt länkbibliotek