Service de noyau unlockl
Objectif
Déverrouille un verrou de processus classique.
Syntaxe
#include <sys/types.h>
#include <sys/errno.h> lock_t *lock_word;
Paramètre
| Article | Descriptif |
|---|---|
| Mot clé lock_word | Indique l'adresse du mot de verrouillage. |
Descriptif
Le service de noyau Unlockl déverrouille un Verrou classique. Seul le propriétaire d'un verrou peut le déverrouiller. Une fois qu'un verrou est déverrouillé, l'unité d'exécution de priorité la plus élevée (le cas échéant) qui attend le verrou est rendue exécutable et peut se présenter à nouveau pour le verrou. S'il y a au moins un processus en attente pour le verrou, la priorité de l'appelant est recalculé. Préemptation d'un appel système explique comment les appels système peuvent utiliser Verrouillage des services du noyau lors de l'accès aux données globales.
Les services Verrouillage et Unlockl ne conservent pas de nombre de niveaux d'imbrication. Un appel unique au service Unlockl déverrouille le verrou pour l'appelant. Le code retour du service Verrouillage doit être utilisé pour déterminer quand déverrouiller le verrou.
Environnement d'exécution
Le service de noyau Unlockl peut être appelé à partir de Environnement de processus uniquement.
Valeurs renvoyées
Le service Unlockl n'a pas de valeur de retour.
Exemple
Un appel au service Unlockl peut être codé comme suit:
int lock_ret; /* return code from lockl() */
extern int lock_word; /* lock word that is external
and was initialized to
LOCK_AVAIL */
...
/* get lock prior to using resource */
lock_ret = lockl(lock_word, LOCK_SHORT)
/* use resource for which lock was obtained */
...
/* release lock if this was not a nested use */
if ( lock_ret != LOCK_NEST )
unlockl(lock_word);