Servicio de kernel unlockl

Finalidad

Desbloquea un bloqueo de proceso convencional.

Sintaxis

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

Parámetro

Elemento Descripción
lock_word Especifica la dirección de la palabra de bloqueo.

Descripción

Nota: El servicio de kernel de unlockl sólo se proporciona para la compatibilidad y no se debe utilizar en código nuevo, que en su lugar debe utilizar bloqueos simples o bloqueos complejos.

El servicio de kernel de unlockl desbloquea un bloqueo convencional. Sólo el propietario de un bloqueo puede desbloquearlo. Una vez que se desbloquea un bloqueo, la hebra de prioridad más alta (si la hay) que está esperando el bloqueo se vuelve ejecutable y puede volver a competir por el bloqueo. Si hay al menos un proceso en espera del bloqueo, se vuelve a calcular la prioridad del llamante. Preparación de una llamada del sistema describe cómo las llamadas del sistema pueden utilizar Servicios de kernel al acceder a datos globales.

Los servicios lockl y unlockl no mantienen un recuento de niveles de anidamiento. Una sola llamada al servicio de unlockl desbloquea el bloqueo para el llamante. El código de retorno del servicio lockl debe utilizarse para determinar cuándo desbloquear el bloqueo.

Nota: El servicio de kernel de unlockl se puede llamar con interrupciones inhabilitadas, sólo si el suceso o la palabra de bloqueo está marcada.

Entorno de ejecución

El servicio de kernel de unlockl sólo se puede llamar desde entorno de proceso .

Valores de retorno

El servicio unlockl no tiene valores de retorno.

Ejemplo

Una llamada al servicio unlockl se puede codificar de la siguiente manera:

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