Sous-routine pthread_atfork
Objectif
Enregistre les gestionnaires de bifurcation.
Bibliothèque
Bibliothèque d'unités d'exécution (libpthreads.a)
Syntaxe
#include <sys/types.h>
#include <unistd.h>
int pthread_atfork (prepare, parent, child)
void (*prepare)(void);
void (*parent)(void);
void (*child)(void);Descriptif
La sous-routine pthread_atfork enregistre les gestionnaires de nettoyage de bifurcation. Le gestionnaire prepare est appelé avant le début du traitement de la sous-routine fork . Le gestionnaire parent est appelé une fois le traitement de la sous-routine fork terminé dans le processus parent. Le gestionnaire enfant est appelé une fois le traitement de la sous-routine fork terminé dans le processus enfant.
Lorsque la sous-routine fork est appelée, seule l'unité d'exécution appelante est dupliquée dans le processus enfant, mais toutes les variables de synchronisation sont dupliquées. La sous-routine pthread_atfork permet d'éviter les incohérences d'état et les interblocages qui en résultent. L'utilisation attendue est que le gestionnaire prepare acquiert tous les mutex et que les deux autres gestionnaires les libèrent dans les processus parent et enfant.
Les gestionnaires de préparation sont appelés dans l'ordre LIFO (Last In First Out) ; tandis que les gestionnaires parent et enfant sont appelés dans l'ordre FIFO (first-in first-out). Ensuite, l'ordre des appels à la sous-routine pthread_atfork est significatif.
Paramètres
| Article | Descriptif |
|---|---|
| préparer | Pointe vers le gestionnaire de nettoyage de prétraitement. Si aucun traitement de pré-bifurcation n'est souhaité, la valeur de ce pointeur doit être définie sur NULL. |
| parent | Pointe vers le gestionnaire de nettoyage post-fork parent. Si aucun traitement post-fork parent n'est souhaité, la valeur de ce pointeur doit être définie sur NULL. |
| enfant | Pointe vers le gestionnaire de nettoyage post-fork enfant. Si aucun traitement post-fork enfant n'est souhaité, la valeur de ce pointeur doit être définie sur NULL. |
Valeurs renvoyées
Une fois l'opération terminée, la sous-routine pthread_atfork renvoie la valeur zéro. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur.
Codes d'erreur
La sous-routine pthread_atfork échoue si:
| Article | Descriptif |
|---|---|
| ENOMEM | L'espace table est insuffisant pour enregistrer les adresses du gestionnaire de bifurcation. |
La sous-routine pthread_atfork ne renvoie pas le code d'erreur EINTR.