unlockl-Kernel-Service
Zweck
Entsperrt eine konventionelle Prozesssperre.
Syntax
#include <sys/types.h>
#include <sys/errno.h> lock_t *lock_word;
Parameter
| Element | Beschreibung |
|---|---|
| Sperrwort | Gibt die Adresse des Sperrworts an. |
Beschreibung
Der Entsperrung -Kernel-Service entsperrt eine Herkömmliche Sperre. Nur der Eigner einer Sperre kann sie entsperren. Sobald eine Sperre freigegeben wird, wird der Thread mit der höchsten Priorität (sofern vorhanden), der auf die Sperre wartet, als ausführbar definiert und kann erneut um die Sperre konkurrieren. Wenn mindestens ein Prozess auf die Sperre gewartet hat, wird die Priorität des Aufrufenden neu berechnet. In Zurückstellung eines Systemaufrufs wird erläutert, wie Systemaufrufe Kernel-Services sperren beim Zugriff auf globale Daten verwenden können.
Die Lockl -und Entsperrung -Services verwalten keine Anzahl der Verschachtelungsebenen. Ein einzelner Aufruf des Entsperrung -Service entsperrt die Sperre für den Aufrufenden. Der Rückkehrcode des Lockl -Service sollte verwendet werden, um zu bestimmen, wann die Sperre entsperrt werden soll.
Ausführungsumgebung
Der Kernel-Service Entsperrung kann nur über Prozessumgebung aufgerufen werden.
Rückgabewerte
Der Entsperrung -Service hat keine Rückgabewerte.
Beispiel
Ein Aufruf an den Entsperrung -Service kann wie folgt codiert werden:
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);