pthread_join - Joindre un thread terminé
Bibliothèque de threads POSIX (
libpthread,
-lpthread)
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
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 l'emplacement pointé par
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é).
En cas de réussite,
pthread_join() renvoie 0 ; en cas
d'erreur, elle renvoie un numéro d'erreur.
- 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 fil d’exécution avec pour identifiant
thread n'a pu être trouvé.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
pthread_join() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Après le succès d'un appel à
pthread_join(),
l'appelant est certain que le thread cible est achevé. L'appelant peut
alors choisir de faire tout le nettoyage requis après
l'achèvement du thread (par exemple, libérer la mémoire
ou les autres ressources qui ont été allouées au thread
cible).
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.
Consultez
pthread_create(3).
pthread_cancel(3),
pthread_create(3),
pthread_detach(3),
pthread_exit(3),
pthread_tryjoin_np(3),
pthreads(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Frédéric Hantrais <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]