Pthread_join est-il indispensable lors de l’utilisation de pthread sous Linux

Je suis un pthread apprentissage et j’ai quelques questions.

Voici mon code:

 #include  #include  #include  #include  #define NUM_THREADS 10 using namespace std; void *PrintHello(void *threadid) { int* tid; tid = (int*)threadid; for(int i = 0; i < 5; i++){ printf("Hello, World (thread %d)\n", *tid); } pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; int t; int* valPt[NUM_THREADS]; for(t=0; t < NUM_THREADS; t++){ printf("In main: creating thread %d\n", t); valPt[t] = new int(); *valPt[t] = t; rc = pthread_create(&threads[t], NULL, PrintHello, (void *)valPt[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); } 

Le code fonctionne bien et je n’appelle pas pthread_join . Alors, je veux savoir si pthread_join est un must?


Un autre problème est:

 valPt[t] = new int(); *valPt[t] = t; rc = pthread_create(&threads[t], NULL, PrintHello, (void *)valPt[t]); 

égal à:

 rc = pthread_create(&threads[t], NULL, PrintHello, &i); 

Ce n’est pas. Mais vous avez besoin de pthread_exit() ou de pthread_join() . Ici, vous avez appelé pthread_exit() , c’est pourquoi les threads enfants continuent l’exécution même après la fin du thread principal. S’il est nécessaire que le thread principal attende que l’exécution des threads enfants soit terminée, vous pouvez utiliser pthread_join() .