Dans l'API Windows, on utilise le terme TLS.
La fonction TlsAlloc est utilisée pour obtenir un index de slot TLS inutilisé - en pratique, le premier disponible - qui sera ensuite réservé jusqu'à la fin du processus ou la libération du TLS. Un seul thread doit appeler cette fonction : par la suite, seul l'index retourné est utilisé. Cette opération est bien entendu totalement atomique. On fournit en général ensuite cet index aux threads soit via une variable globale (accédée en lecture seule par les threads), soit dans les paramètres de création du thread (solution préférable). L'index retourné est un entier, mais ne doit pas être considéré comme un indice de tableau. Il est nécessaire de le traiter comme un type opaque.
Les fonctions TlsGetValue et TlsSetValue sont ensuite utilisées pour (respectivement) lire et écrire une variable TLS, identifiée par son index de slot TLS. Cette variable est un pointeur non-typé, dont l'usage est libre, et qui sera propre à chaque thread. Toutefois, tout thread est responsable de l'allocation des données ciblées par ce pointeur.
On peut noter que la taille de ce pointeur est dépendante de l'architecture Windows courante (32 bits ou 64 bits), et qu'il n'est pas contre-indiqué d'utiliser le slot pour stocker une variable quelconque, de taille inférieure ou égale à celle du pointeur, en lieu et place d'un pointeur.
Ceci recouvre notamment le cas d'un entier : c'est ainsi que l'API Windows stocke le dernier code d'erreur obtenu par GetLastError, par exemple.
La fonction TlsFree peut être utilisée pour libérer l'index de slot TLS passé en paramètre. L'index est ensuite considéré de nouveau comme « inutilisé », et pourra être réattribué par la suite. Il est donc crucial d'être certain, lors de la libération, qu'il n'existe plus aucun thread utilisant cet index TLS.
Dans l'API Pthreads, on utilise le terme TSD (Thread-Specific Data) pour désigner le TLS.
Le principe est similaire à celui utilisé sous Windows, seuls les noms des fonctions changent :
La seule différence réelle entre les deux systèmes est que pthread_key_create permet de définir un destructeur optionnel qui sera appelé automatiquement à la fin du thread. Chaque destructeur recevra, en paramètre, le contenu stocké dans la clé associée, permettant ainsi d'effectuer la libération des ressources associées.
L'utilisation de ce destructeur ne dispense pas d'appeler explicitement pthread_key_delete pour libérer le TSD lui-même, au niveau du processus. Le destructeur ne permet que la libération des données locales au thread.