Una descrizione di come funziona su Linux di Uli Drepper (manutentore di glibc) può essere trovato qui: www.akkadia.org/drepper/tls.pdf
L'esigenza di gestire moduli caricati dinamicamente ecc rendere l'intero meccanismo un po 'complicata, che forse parzialmente spiega perché il documento pesa in 79 pagine (!).
Memoria-utilizzo-saggio, ogni variabile per-thread ha ovviamente bisogno della propria memoria per-thread (sebbene in alcuni casi questo possa essere fatto pigramente in modo tale che lo spazio venga allocato solo una volta che la variabile è stata prima consultata), e quindi ci sono alcuni dati aggiuntivi necessari per le tabelle offset ecc.
Per quanto riguarda le prestazioni, il costo aggiuntivo per accedere a una variabile TLS ruota principalmente intorno al recupero dell'indirizzo della variabile. Su x86 Linux il registro GS viene utilizzato come inizio per ottenere un ID thread, su x86-64 FS. Di solito ci sono alcuni riferimenti ai puntatori e una chiamata di funzione (__tls_get_addr) per il codice caricato dinamicamente. C'è anche il costo che la creazione di un nuovo thread è più lento perché l'implementazione deve allocare spazio e possibilmente inizializzare tutte le vele TLS (se non fatto pigramente).
TLS è utile per rendere facilmente thread-safe alcuni vecchi schemi di thread non sicuri (si pensi a errno), ma per un nuovo codice progettato dall'inizio per un mondo a più thread è molto raramente necessario.
Il costo maggiore è la manutenibilità del codice. –