Sous-routine pthread_atfork_np `
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_np (arg, prepare, parent, child)
void *arg;
void (*prepare)(void *);
void (*parent)(void *);
void (*child)(void *);
Descriptif
La sous-routine pthread_atfork_np enregistre les gestionnaires de nettoyage pour la sous-routine fork. L'arg est le paramètre à transmettre aux fonctions de traitement avant et après la fourche. Le gestionnaire de préparation est appelé avant le début du traitement de la sous-routine fork. Le gestionnaire parent est appelé une fois que le traitement de la sous-routine fork est 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_np permet d'éviter les incohérences d'état et les interblocages qui en résultent. L'utilisation attendue est que le gestionnaire de préparation 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). Par conséquent, l'ordre des appels à la sous-routine pthread_atfork_np est significatif.
- Le fichier d'en-tête pthread.h doit être le premier fichier inclus de chaque fichier source utilisant la bibliothèque d'unités d'exécution.
- La sous-routine pthread_atfork_np n'est pas portable.
Paramètres
- arg
- Pointe vers le paramètre à transmettre aux gestionnaires de nettoyage de bifurcation.
- préparer
- 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
- 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
- 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 terminée, la sous-routine pthread_atfork_np renvoie la valeur zéro. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur
Codes d'erreur
- ENOMEM
- L'espace table est insuffisant pour enregistrer les adresses du gestionnaire de bifurcation.