Archiviazione locale thread
Tutti i thread di un processo condividono lo spazio indirizzi virtuale. Le variabili locali di una funzione sono univoche per ogni thread che esegue la funzione. Tuttavia, le variabili statiche e globali vengono condivise da tutti i thread nel processo. Con thread l'archiviazione locale (TLS), è possibile fornire dati univoci per ogni thread a cui il processo può accedere usando un indice globale. Un thread alloca l'indice, che può essere usato dagli altri thread per recuperare i dati univoci associati all'indice.
La costante TLS_MINIMUM_AVAILABLE definisce il numero minimo di indici TLS disponibili in ogni processo. Questo minimo è garantito almeno 64 per tutti i sistemi. Il numero massimo di indici per processo è 1.088.
Quando vengono creati i thread, il sistema alloca una matrice di valori LPVOID per TLS, inizializzati su NULL. Prima di poter usare un indice, deve essere allocato da uno dei thread. Ogni thread archivia i dati per un indice TLS in un slot TLS nella matrice. Se i dati associati a un indice verranno inseriti in un valore LPVOID, è possibile archiviare i dati direttamente nello slot TLS. Tuttavia, se si usa un numero elevato di indici in questo modo, è preferibile allocare spazio di archiviazione separato, consolidare i dati e ridurre al minimo il numero di slot TLS in uso.
Il diagramma seguente illustra il funzionamento di TLS. Per un esempio di codice che illustra l'uso dell'archiviazione locale del thread, vedere Using Thread Local Storage.
Il processo ha due thread, Thread 1 e Thread 2. Alloca due indici da usare con TLS, gdwTlsIndex1 e gdwTlsIndex2. Ogni thread alloca due blocchi di memoria (uno per ogni indice) in cui archiviare i dati e archivia i puntatori a questi blocchi di memoria negli slot TLS corrispondenti. Per accedere ai dati associati a un indice, il thread recupera il puntatore al blocco di memoria dallo slot TLS e lo archivia nella variabile locale lpvData.
È ideale usare TLS in una libreria a collegamento dinamico (DLL). Per un esempio, vedere Using Thread Local Storage in a Dynamic Link Library.
Argomenti correlati
-
di archiviazione locale del thread (Visual C++)
-
uso dell' di archiviazione locale del thread
-
uso dell'archiviazione locale del thread in una libreria a collegamento dinamico