2009-11-23 5 views

Répondre

4

TLS peut certainement être utile dans un nouveau code. Si vous voulez une variable globale qui doit être spécifique à chaque thread, (comme errno en C/C++), le thread-local-storage est le chemin à parcourir.

+1

java.text.DateFormat est un bon exemple. Vous pouvez le réutiliser, mais il n'est pas sûr pour les threads, donc un bon moyen de travailler avec DateFormat en toute sécurité sans en créer un nouveau à chaque fois est de le stocker dans un ThreadLocal. – cjstehno

0

Ces jours errno est généralement placé dans le stockage local de threads.

Il existe certaines situations (par exemple: bibliothèques partagées telles que les DLL nécessitant un code de démarrage) où l'utilisation du stockage local au thread peut poser problème.

1

Objets singleton spécifiques au filetage? Un serveur Web multithread où chaque thread traite une requête, il y a une bonne possibilité de certaines données TLS (comme l'URL de requête ou certaines connexions de base de données, essentiellement des ressources destinées à être utilisées à tout moment lors de la gestion des requêtes si nécessaire) afin qu'ils puissent être facilement accessibles n'importe où dans le code lorsque cela est nécessaire.

+0

omfg le mot S ... :( –

+0

Singleton Global, même différence. –

0

Je n'ai-elle nécessaire pour le traitement des erreurs spécifiques au fil et l'optimisation (en C):

__thread int cpfs_errno; 
static __thread struct Cpfs *g_cpfs; 

Dans cet exemple, cela me permet le passage d'un pointeur de contexte de struct Cpfs * à travers des dizaines de fonctions dans lesquelles ça ne change jamais.

Questions connexes