Service de noyau unlockl

Objectif

Déverrouille un verrou de processus classique.

Syntaxe

#include <sys/types.h>
#include <sys/errno.h>
void unlockl ( lock_word)
lock_t *lock_word;

Paramètre

Article Descriptif
Mot clé lock_word Indique l'adresse du mot de verrouillage.

Descriptif

Remarque: Le service de noyau Unlockl est fourni à des fins de compatibilité uniquement et ne doit pas être utilisé dans un nouveau code, qui devrait plutôt utiliser des verrous simples ou Verrous complexes.

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.

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

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);