Accueil
|_Accueil Langage C++ |_Les mots clés C++ |_break |_continue |_do / while |_for |_for (foreach) |_goto |_if / else |_switch / case |_thread_local |_throw |_try / catch |_while |
Mot clé thread_localSyntaxe d'utilisationthread_local type variableName; Ce mot clé permet d'indiquer qu'une variable stockera une valeur différentes pour chaque thread qui l'utilisera. Il se place devant la déclaration de votre variable. Exemple de code#include <iostream> #include <thread> using namespace std; #define THREAD_COUNT 10 #define LOOP_COUNT 10000 thread_local unsigned long counter = 0; void entryPoint() { for( unsigned long i=0; i<LOOP_COUNT; i++ ) { counter ++; } cout << "thread terminated " << counter << endl; } int main() { array<thread, THREAD_COUNT> threads; for( unsigned int i = 0; i < THREAD_COUNT; ++i ) { threads[i] = thread( entryPoint ); } for( thread & th : threads ) th.join(); cout << "Counter == " << counter << endl; return 0; }
Pour compiler et exécuter cet exemple, veuillez saisir les lignes de commandes suivantes (attention, l'affichage final pour légèrement
varier de l'exemple ci-dessous, à cause de l'aspect "multi-threadé" de notre exemple). Notez que, dans cet exemple, il n'est pas
nécessaire de synchroniser les incrémentations à cause du mot clé $> g++ -Wall -std=c++11 Sample.cpp -o Sample -pthread $> Sample thread terminated thread terminated 10000 10000 thread terminated 10000 thread terminated 10000 thread terminated thread terminated 1000010000 thread terminated 10000 thread terminated 10000 thread terminated 10000 thread terminated 10000 Counter == 0 $>
Attention : cet exemple met bien en jeu 11 threads : les dix explicitement lancés et le thread principal exécutant votre |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :