Variables privées dans les threads

Je suis un partisan de l’utilisation de pthreads avec C dans Linux. J’ai besoin de créer et d’utiliser des variables de thread privées .

Laissez-moi vous expliquer exactement ce dont j’ai besoin avec un exemple. Dans le morceau de code suivant, je crée 4 threads, je voudrais que chacun d’eux crée une variable privée foo , donc au total 4 variables foo , une pour chaque thread. Chaque thread ne doit “voir” que sa propre variable foo et pas les autres. Par exemple, si le thread 1 définit foo = 56 , puis appelle doStuff , doStuff doit imprimer 56 . Si le thread 2 définit foo = 99 et appelle ensuite doStuff , doStuff doit imprimer 99 . Mais si le fil 1 appelle à nouveau doStuff , 56 doit être imprimé à nouveau.

 void doStuff() { printf("%d\n", foo); // foo is different depending on each thread } void *initThread(void *threadid) { // initalize private thread variable (foo) for this thread int foo = something; printf("Hello World! It's me, thread #%ld!, %d\n", (long) threadid, x); doStuff(); } int main() { pthread_t threads[4]; long t; for (t = 0; t < 4; t++){ printf("In main: creating thread %ld\n", t); pthread_create(&threads[t], NULL, initThread, (void *) t); } pthread_exit(NULL); /* support alive threads until they are done */ } 

Des idées sur la façon de faire cela (qui est fondamentalement l’idée de variables de thread privées) en utilisant pthreads ?

Je crois que vous recherchez le terme Thread Local Storage . Consultez la documentation pour pthread_get_specific, pthread_get_specific , pthread_create_key ou utilisez le spécificateur de classe de stockage __thread .

Une autre alternative consiste à avoir une seule variable globale et à utiliser un mutex, ou simplement à passer foo en argument.