Sortie inattendue dans pthread

Bonjour pour le code ci-dessus dans le fil de discussion, il affiche 0 (tid = 0) au lieu de 8 … quelle peut en être la raison? Dans la fonction PrintHello, je suis en train d’imprimer un threadid mais j’envoie la valeur 8 mais elle affiche 0 en sortie

#include  #include  #include  void *PrintHello(void *threadid) { int *tid; tid = threadid; printf("Hello World! It's me, thread #%d!\n", *tid); pthread_exit(NULL); } int main(int argc, char *argv[]) { pthread_t thread1,thread2; int rc; int value = 8; int *t; t = &value; printf("In main: creating thread 1"); rc = pthread_create(&thread1, NULL, PrintHello, (void *)t); if (rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } printf("In main: creating thread 2\n"); rc = pthread_create(&thread1, NULL, PrintHello, (void *)t); if (rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } /* Last thing that main() should do */ pthread_exit(NULL); } 

L’object réel qui contient 8 est une value locale à votre fonction main , donc l’access après main sortie de main n’est pas valide.

Vous n’attendez pas que vos threads enfants finissent avant de tenter d’accéder à cette variable locale, le comportement n’est donc pas défini.

Un correctif serait de faire attendre vos fils avant de quitter en utilisant pthread_join .

(J’ai supposé que vous aviez fait une faute de frappe lors de votre deuxième appel à pthread_create et que vous vouliez transmettre thread2 au lieu de thread1 .)

Par exemple

 /* in main, before exiting */ pthread_join(thread1, NULL); pthread_join(thread2, NULL);