Comme expliqué dans les documentations openpub,
pthread_exit()
quittera le thread qui l'appelle.
Dans votre cas puisque le principal l'appelle, le thread principal se terminera tandis que vos threads générés continueront à s'exécuter. Ceci est principalement utilisé dans les cas où le thread principal n'est requis que pour générer des threads et laisser les threads faire leur travail
pthread_join
suspendra l'exécution du thread qui l'a appelé à moins que le thread cible ne se termine
Ceci est utile dans les cas où vous souhaitez attendre que le ou les threads se terminent avant de poursuivre le traitement dans le thread principal.
Les deux méthodes garantissent que votre processus ne se termine pas avant la fin de tous vos fils de discussion.
La méthode de jointure a votre fil du main
fonction attend explicitement tous les threads qui doivent être "rejoints".
Le pthread_exit
la méthode termine votre main
fonctionner et enfiler de manière contrôlée. main
a la particularité de se terminer par main
sinon, cela mettrait fin à l'ensemble de votre processus, y compris tous les autres threads.
Pour que cela fonctionne, vous devez être sûr qu'aucun de vos threads n'utilise de variables locales déclarées à l'intérieur main
fonction. L'avantage de cette méthode est que votre main
n'a pas besoin de connaître tous les threads qui ont été démarrés dans votre processus, par exemple parce que d'autres threads ont eux-mêmes créé de nouveaux threads qui main
ne sait rien.
pthread_exit
termine le thread appelant tant que pthread_join
suspend l'exécution du thread appelant jusqu'à ce que les threads cibles terminent leur exécution.
Ils sont assez bien expliqués en détail dans la documentation du groupe ouvert :
- pthread_exit
- pthread_join