Comment plusieurs threads peuvent-ils avoir le même identifiant de thread?

J’ai une question: plusieurs threads peuvent-ils avoir le même thread_id? (Bien sûr que non.) Mais mon code le fait. Comment est-ce possible?

#include #include #include #include void* message(void* var){ int t = (int)var; printf("\n%d- Hi I'm thread ID=%lu\n",t+1,(int unsigned long)pthread_self()); } int main(void){ pthread_t threads[10]; int report[10]; for(int i=0;i<10;i++){ report[i] = pthread_create(&threads[i],NULL,message,(void*)i); pthread_join(threads[i],NULL); } return 0; } 

Mon code à (Ubuntu 17.04) montrant ce résultat

 1- Hi I'm thread ID=3076250432 2- Hi I'm thread ID=3076250432 3- Hi I'm thread ID=3076250432 4- Hi I'm thread ID=3076250432 5- Hi I'm thread ID=3076250432 6- Hi I'm thread ID=3076250432 7- Hi I'm thread ID=3076250432 8- Hi I'm thread ID=3076250432 9- Hi I'm thread ID=3076250432 10- Hi I'm thread ID=3076250432 

 for(int i=0;i<10;i++){ report[i] = pthread_create(&threads[i],NULL,message,(void*)i); pthread_join(threads[i],NULL); } 

Vous créez un fil, puis vous le rejoignez immédiatement, en attendant qu'il se termine. Les dix threads sont ainsi créés séquentiellement plutôt que parallèlement, ce qui permet de recycler leurs identifiants.

Si vous créez tous les dix threads avant de les joindre, vous verrez des identifiants différents.

 for(int i=0;i<10;i++){ report[i] = pthread_create(&threads[i],NULL,message,(void*)i); } for(int i=0;i<10;i++){ pthread_join(threads[i],NULL); }