Delen via


Lokale threadopslag

Alle threads van een proces delen de virtuele adresruimte. De lokale variabelen van een functie zijn uniek voor elke thread waarmee de functie wordt uitgevoerd. De statische en globale variabelen worden echter gedeeld door alle threads in het proces. Met thread lokale opslag (TLS) kunt u unieke gegevens opgeven voor elke thread waartoe het proces toegang heeft met behulp van een globale index. De ene thread wijst de index toe, die door de andere threads kan worden gebruikt om de unieke gegevens op te halen die aan de index zijn gekoppeld.

De constante TLS_MINIMUM_AVAILABLE definieert het minimale aantal TLS-indexen dat in elk proces beschikbaar is. Dit minimum is gegarandeerd ten minste 64 voor alle systemen. Het maximum aantal indexen per proces is 1088.

Wanneer de threads worden gemaakt, wijst het systeem een matrix van LPVOID- waarden toe voor TLS, die worden geïnitialiseerd naar NULL. Voordat een index kan worden gebruikt, moet deze worden toegewezen door een van de threads. Elke thread slaat de gegevens voor een TLS-index op in een TLS-site in de matrix. Als de gegevens die aan een index zijn gekoppeld, in een LPVOID waarde passen, kunt u de gegevens rechtstreeks opslaan in de TLS-site. Als u echter een groot aantal indexen op deze manier gebruikt, is het beter om afzonderlijke opslag toe te wijzen, de gegevens samen te voegen en het aantal GEBRUIKTE TLS-sites te minimaliseren.

In het volgende diagram ziet u hoe TLS werkt. Zie Thread Local Storage gebruikenvoor een codevoorbeeld waarin het gebruik van lokale threadopslag wordt geïllustreerd.

Diagram dat laat zien hoe het T L S-proces werkt.

Het proces heeft twee threads, Thread 1 en Thread 2. Er worden twee indexen toegewezen voor gebruik met TLS, gdwTlsIndex1 en gdwTlsIndex2. Aan elke thread worden twee geheugenblokken (één voor elke index) toegewezen waarin de gegevens moeten worden opgeslagen en worden de aanwijzers opgeslagen in deze geheugenblokken in de bijbehorende TLS-sites. Voor toegang tot de gegevens die zijn gekoppeld aan een index, haalt de thread de aanwijzer op naar het geheugenblok van de TLS-site en slaat deze op in de lokale lpvData-variabele.

Het is ideaal om TLS te gebruiken in een DLL (Dynamic Link Library). Zie Thread Local Storage gebruiken in een Dynamic Link Libraryvoor een voorbeeld.

Thread Local Storage (Visual C++)

Thread Local Storage gebruiken

Lokale threadopslag gebruiken in een dynamische koppelingsbibliotheek