Service de noyau e_sleepl

Objectif

Force l'unité d'exécution du noyau appelant à attendre l'occurrence d'un événement partagé.

Syntaxe

#include <sys/types.h> #include <sys/errno.h> #include <sys/sleep.h> int e_sleepl ( mot-verrou, mot-événement, indicateurs) int *mot-verrou; tid_t *mot-événement; int indicateurs;

Paramètres

Article Descriptif
Mot clé lock_word Indique le mot de verrouillage d'un verrou de processus classique.
Mot-événement Indique le mot d'événement partagé. Le noyau utilise ce mot pour ancrer la liste des threads du noyau endormi sur cet événement. Ce mot d'événement doit être initialisé sur EVENT_NULL avant sa première utilisation.
Indicateurs Indique les indicateurs qui contrôlent l'action sur l'occurrence d'un signal. Ces indicateurs se trouvent dans le fichier /usr/include/sys/sleep.h .

Descriptif

Remarque: Le service de noyau E_sleepl est fourni pour le portage des anciennes applications écrites pour les versions précédentes du système d'exploitation. Utilisez le service de noyau Unité_sleep_thread lors de l'écriture de nouvelles applications.

Le service de noyau E_sleepl attend que l'événement partagé spécifié se produise. Le noyau place l'unité d'exécution de noyau en cours sur la liste ancrée par le paramètre Mot-événement . Le service _wakeup réveille toutes les unités d'exécution de la liste.

Le service _wakeup ne réveille pas une unité d'exécution qui n'est pas en train de dormir dans la fonction E_sleepl . En d'autres cas, si une opération _wakeup pour un événement est émise avant que l'unité d'exécution appelle le service E_sleepl pour l'événement, l'unité d'exécution dort encore, en attente de l'opération _wakeup suivante pour l'événement. Cela implique que les routines utilisant cette fonction doivent s'assurer qu'aucune fenêtre de synchronisation n'existe dans laquelle les événements peuvent être manqués en raison du service _wakeup appelé avant que le service E_sleepl pour l'événement n'ait été appelé.

Le service E_sleepl déverrouille également le verrou conventionnel spécifié par le paramètre Mot clé lock_word avant de mettre l'unité d'exécution en veille. Il rachète également le verrou lorsque le fil se réveille.

L'ancrage de la liste d'événements, spécifié par le paramètre Mot-événement , doit être initialisé sur EVENT_NULL avant sa première utilisation. Les extensions de noyau ne doivent pas modifier cette ancre pendant qu'elle est en cours d'utilisation.

Remarque: Le service E_sleepl peut être appelé avec les interruptions désactivées, uniquement si l'événement ou le mot de verrouillage est bloqué.

Valeurs des indicateurs Paramètre

Le paramètre Indicateurs contrôle la façon dont les signaux affectent l'attente d'un événement. Trois indicateurs sont disponibles pour le service E_sleepl :

Article Descriptif
EVENT_SIGRET Indique la fin de l'attente pour l'événement par un signal non masqué. La valeur de retour est définie sur EVENT_SIG.
EVENT_SIGWAKE Indique la fin de l'événement par un signal non masqué. Cette option indique également le transfert du contrôle à la déclaration à partir du dernier service Setjmpx avec la valeur de retour définie sur EINTR.
EVENT_ABRÉGÉ Indique que les signaux ne peuvent pas mettre fin à l'attente. Utilisez l'indicateur EVENT_ABRÉGÉ pour des dages courts et garantis.
Remarque: L'indicateur EVENT_SIGRET remplace l'indicateur EVENT_SIGWAKE .

Environnement d'exécution

Le service de noyau E_sleepl peut être appelé à partir de Environnement de processus uniquement.

Valeurs renvoyées

Article Descriptif
EVENT_SUCC Indique que l'exécution a réussi.
SIG Indique que l'indicateur EVENT_SIGRET est défini et que l'attente est arrêtée par un signal.