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.