unlockl-Kernel-Service

Zweck

Entsperrt eine konventionelle Prozesssperre.

Syntax

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

Parameter

Element Beschreibung
Sperrwort Gibt die Adresse des Sperrworts an.

Beschreibung

Anmerkung: Der Kernel-Service Entsperrung wird nur aus Kompatibilitätsgründen bereitgestellt und sollte nicht in neuem Code verwendet werden, der stattdessen einfache Sperren oder Komplexe Sperrenverwenden sollte.

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.

Anmerkung: Der Entsperrung -Kernel-Service kann nur mit inaktivierten Interrupts aufgerufen werden, wenn das Ereignis oder das Sperrwort fixiert ist.

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