Bonjour,
j'aimerais savoir comment faire pour avoir une variable statique, mais thread-safe.
Par exemple sous windows la fonction rand() se modifie à chaque à appel mais dans son thread, et n'affecte pas les autres threads.
Bonjour,
j'aimerais savoir comment faire pour avoir une variable statique, mais thread-safe.
Par exemple sous windows la fonction rand() se modifie à chaque à appel mais dans son thread, et n'affecte pas les autres threads.
Il faut utiliser du stockage spécifique au thread.
Comment faire cela dépend de ton système d'exploitation etc.
VC++ te permet de stocker une variable dans un TLS avec __declspec( thread ):
http://msdn2.microsoft.com/en-us/lib...zb(VS.80).aspx
autre option:
http://www.codeproject.com/threads/tls.asp
Hop, une petite recherche sur TLS
-> http://www.developpez.net/forums/sho...&highlight=tls
Compléments : les non-PODs pourraient bien être supportés directement en C++0x.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Remarque au sujet de __declspec(thread) : Une DLL contenant des variables ainsi déclarées ne peut être chargée qu'au démarrage du programme : Ces DLLs deviennent incompatibles avec LoadLibrary().
C'est pourquoi dans les DLLs, il est conseillé d'utiliser le TLS manuellement.
http://msdn2.microsoft.com/en-us/lib...8x(VS.80).aspx
http://msdn2.microsoft.com/en-us/lib...97(VS.80).aspx
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
merci pour vos liens le include <tls.h> m'a l'air bien.
Partager