pthread_join(3) Joindre un thread terminé

SYNOPSIS

#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);

Compilez et effectuez l'édition des liens avec l'option -pthread.

DESCRIPTION

La fonction pthread_join() attend que le thread spécifié par thread se termine. Si ce thread s'est déjà terminé, pthread_join() revient tout de suite. Le thread spécifié par thread doit être joignable.

Si retval n'est pas NULL, pthread_join() copie la valeur de sortie du thread cible (c'est-à-dire la valeur que le thread cible a fournie à pthread_exit(3)) dans l'emplacement pointé par *retval. Si le thread cible est annulé, PTHREAD_CANCELED est placé dans *retval.

Si plusieurs threads essaient simultanément de joindre le même thread, le résultat est indéfini. Si le thread appelant pthread_join() est annulé, le thread cible reste joignable (c'est-à-dire qu'il ne sera pas détaché).

VALEUR RENVOYÉE

En cas de réussite, pthread_join() renvoie 0 ; en cas d'erreur, elle renvoie un numéro d'erreur.

ERREURS

EDEADLK
Un verrou perpétuel (deadlock) a été détecté, par exemple deux threads essaient de se joindre mutuellement ; ou bien thread est aussi le thread appelant.
EINVAL
thread n'est pas un thread joignable.
EINVAL
Un autre thread attend déjà de joindre ce thread.
ESRCH
Aucun thread avec pour identifiant thread n'a pu être trouvé.

CONFORMITÉ

POSIX.1-2001.

NOTES

Après un appel réussi à pthread_join(), l'appelant est sûr que le thread cible s'est terminé.

Joindre un thread qui avait préalablement été joint résulte en un comportement indéfini.

Un échec à joindre un thread qui est joignable (c'est-à-dire non détaché) produit un « thread zombie ». Il faut l'éviter, car chaque thread zombie consomme des ressources du système, et si trop de threads zombies s'accumulent, il ne sera plus possible de créer de nouveaux threads (ou de nouveaux processus).

Il n'existe pas d'analogue pthreads à waitpid(-1, &status, 0) pour joindre tout thread non terminé. Si vous pensez avoir besoin de cette fonctionnalité, vous devez probablement repenser la conception de votre application.

Tous les threads dans un processus sont au même niveau : tout thread peut joindre tout autre thread du processus.

EXEMPLE

Consultez pthread_create(3).

COLOPHON

Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Denis Barbier (2010).

Veuillez signaler toute erreur de traduction en écrivant à <[email protected]> ou par un rapport de bogue sur le paquet manpages-fr.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».