Bonjour,
Je viens d'effectuer des tests supplémentaires, avec des fonctions contenant des pthread_create, qui lancent d'autres fonctions contenant eux-mêmes des pthread_create. Cette fois-ci en plaçant pthread_exit(NULL) à la fin de la fonction main(), exemple :
Ici pas de DETACHED thread, et on attend que tous les threads exécutés dans le main se terminent proprement avant de quitter le programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #include <pthread.h> #include <stdlib.h> #include <stdio.h> void* affiche1(void* param){ int i = 0; while(i < 6) { printf("Coucou\n"); sleep(1); i++; } } void* affiche(void* param){ int i = 0; pthread_t t2; pthread_create(&t2, NULL, affiche1, NULL); while(i < 3) { printf("Hello\n"); sleep(1); i++; } } int main(){ affiche(NULL); pthread_exit(0); }
Si je devais donner un définition au comportement de pthread_exit, je dirais :
Lorsque le exit du main est remplacé par pthread_exit, on attend que le processus a.out (nom par défaut du binaire), ait terminé d'exécuter tous ses threads avant que le programme ne se termine.
Autrement je ne lis cette définition presque nulle part. Sauf dans celui-ci qui y ressemble (merci Bktero) :
http://linux.die.net/man/3/pthread_exitTo allow other threads to continue execution, the main thread should terminate by calling pthread_exit() rather than exit(3).
Partager