e_sleep_thread Kernel

Finalidad

Fuerza a la hebra del kernel que llama a esperar la aparición de un suceso compartido.

Sintaxis

#include <sys/sleep.h>
int e_sleep_thread ( event_word,  lock_word,  flags)
tid_t *event_word;
void *lock_word;
int flags;

Parámetros

Elemento Descripción
event_word Especifica la palabra de suceso compartido. El kernel utiliza el parámetro event_word como ancla para la lista de hebras que esperan en este suceso compartido.
lock_word Especifica un bloqueo simple o complejo para desbloquear.
Banderas Especifica opciones de manejo de bloqueo y señal.

Descripción

El servicio de kernel de {\f2} obliga a la hebra de llamada a esperar hasta que se produzca un suceso compartido. El kernel coloca la hebra de llamada en la lista de sucesos anclada por el parámetro event_word . Esta lista la utilizan los servicios de kernel de e_wakeup, e_wakeup_oney e_wakeup_w_result para obtener algunas o todas las hebras en espera de que se produzca el suceso.

Se puede especificar un bloqueo; se desbloqueará cuando se especifique el servicio de kernel, justo antes de los bloques de hebras. Este bloqueo puede ser un bloqueo simple o complejo, tal como lo especifica el parámetro Banderas . Cuando el servicio de kernel sale, el bloqueo se vuelve a adquirir.

Distintivos

El parámetro Banderas especifica opciones para el servicio de kernel. Se pueden combinar varios distintivos con el operador o operador de bit a bit. Se describen a continuación.

Los cuatro distintivos siguientes especifican el tipo de bloqueo. Si el parámetro lock_word no es NULL, debe utilizarse exactamente uno de estos distintivos.

Distintivo Descripción
LOCK_HANDLER lock_word especifica un bloqueo simple que protege una sección crítica de interrupción de hebra o interrupción de interrupción.
LOCK_SIMPLE lock_word especifica un bloqueo sencillo que protege una sección crítica de hebra de hebra.
LOCK_READ lock_word especifica un bloqueo complejo en modalidad de lectura compartida.
LOCK_WRITE lock_word especifica un bloqueo complejo en modalidad de escritura exclusiva.

El distintivo siguiente especifica el manejo de la señal. De forma predeterminada, mientras el hilo duerme, las señales se mantienen pendientes hasta que se despierta.

Elemento Descripción
INTERRUMPIBLE Las señales deben ser controladas mientras el hilo del núcleo está durmiendo. Si es necesario entregar una señal, se despierta el hilo.

Valores de retorno

El servicio de kernel de {\f2} devuelve un valor que indica cómo se ha despertado la hebra del kernel. Se definen los valores siguientes:

Elemento Descripción
THREAD_DESPERED Denota un wakeup normal; el suceso se ha producido.
THREAD_INTERRUPTED Denota una interrupción por una señal. Este valor se puede devolver aunque el distintivo INTERRUMPIBLE no esté establecido, ya que también puede ser generado por los servicios de kernel de e_clear_wait o e_wakeup_w_result .
THREAD_TIMED_OUT Indica una caducidad de tiempo de espera. {\f2} no tiene tiempo de espera. Sin embargo, los servicios de kernel de e_clear_wait o e_wakeup_w_result pueden generar este valor de retorno.
THREAD_OTHER Delinea los códigos de sistema predefinidos de los que deben definirse a nivel de subsistema. El subsistema debe definir sus propios valores superiores o iguales a este valor.

Entorno de ejecución

El servicio de kernel de {\f2} sólo se puede llamar desde el entorno de proceso .