stockage local des threads
Tous les threads d’un processus partagent son espace d’adressage virtuel. Les variables locales d’une fonction sont propres à chaque thread qui exécute la fonction. Toutefois, les variables statiques et globales sont partagées par tous les threads du processus. Avec le stockage local de thread (TLS), vous pouvez fournir des données uniques pour chaque thread auquel le processus peut accéder à l’aide d’un index global. Un thread alloue l’index, qui peut être utilisé par les autres threads pour récupérer les données uniques associées à l’index.
La constante TLS_MINIMUM_AVAILABLE définit le nombre minimal d’index TLS disponibles dans chaque processus. Ce minimum est garanti à au moins 64 pour tous les systèmes. Le nombre maximal d’index par processus est de 1 088.
Lorsque les threads sont créés, le système alloue un tableau de valeurs LPVOID pour TLS, qui sont initialisées sur NULL. Avant qu’un index puisse être utilisé, il doit être alloué par l’un des threads. Chaque thread stocke ses données pour un index TLS dans un emplacement TLS dans le tableau. Si les données associées à un index tiennent dans une valeur LPVOID , vous pouvez stocker les données directement dans l’emplacement TLS. Toutefois, si vous utilisez un grand nombre d’index de cette façon, il est préférable d’allouer un stockage distinct, de consolider les données et de réduire le nombre d’emplacements TLS utilisés.
Le diagramme suivant illustre le fonctionnement de TLS. Pour obtenir un exemple de code illustrant l’utilisation du stockage local de threads, consultez Utilisation du stockage local de threads.
Le processus comporte deux threads, thread 1 et thread 2. Il alloue deux index à utiliser avec TLS, gdwTlsIndex1 et gdwTlsIndex2. Chaque thread alloue deux blocs de mémoire (un pour chaque index) dans lesquels stocker les données et stocke les pointeurs vers ces blocs de mémoire dans les emplacements TLS correspondants. Pour accéder aux données associées à un index, le thread récupère le pointeur vers le bloc de mémoire à partir de l’emplacement TLS et le stocke dans la variable locale lpvData.
Il est idéal d’utiliser TLS dans une bibliothèque de liens dynamiques (DLL). Pour obtenir un exemple, consultez Utilisation du stockage local de threads dans une bibliothèque de liens dynamiques.
Rubriques connexes