Citation Envoyé par MAN PTHREAD_JOIN(3)
Quand l’exécution d’un thread joignable s’achève, ses ressources mémoires (descripteur de thread et pile) ne sont pas désallouées jusqu’à ce qu’un autre thread le joigne en utilisant pthread_join.
Aussi, pthread_join doit être appelée une fois pour chaque thread joignable pour éviter des "fuites" de mémoire.

Au plus un seul thread peut attendre la mort d’un thread donné. Appeler pthread_join sur un thread th dont un autre thread attend déjà la fin renvoie une erreur.
Citation Envoyé par MAN PTHREAD_DETACH(3)
pthread_detach place le thread th dans l’état détaché. Celà garantit que les ressources mémoires consommées par th seront immédiatement libérées lorsque l’exécution de th s’achèvera. Cependant, celà empêche les autres threads de se synchroniser sur la mort de th en utilisant pthread_join.
Si je ne fait pas un appel a pthread_join() sur un thread créé avec les attributs par défaut et sans appel à la fonction pthread_detach, ses ressources mémoire ne seront jamais libéré ? En terme de code pur si je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
void fonction(){
int a;
}
 
int main(){
pthread_t th;
pthread_create(th,NULL,fonction,NULL);
sleep(5000);
}
l'espace mémoire reservé par la variable a ne sera jamais libéré avant la fin du programme, même si le thread s'achéve ?