e_sleepl 内核服务

用途

强制进行调用的内核线程等待共享事件发生。

语法

#include <sys/types.h> #include <sys/errno.h> #include <sys/sleep.h> int e_sleepl ( 锁字, event_word, 标志) 内部 *锁字; tid_t *event_word; 英特 标志;

参数

描述
lock_word 指定常规进程锁定的锁字。
事件词 指定共享事件字。 内核使用此词来锚定在此事件上休眠的内核线程的列表。 在首次使用此事件字之前,必须将其初始化为 EVENT_NULL
标志 指定用于控制信号出现时的操作的标志。 这些标志可在 /usr/include/sys/sleep.h 文件中找到。

描述

注: 提供了 埃斯莱普勒 内核服务,用于移植为先前版本的操作系统编写的旧应用程序。 在编写新应用程序时使用 埃斯莱普线程 内核服务。

埃斯莱普勒 内核服务会等待指定的共享事件发生。 内核将当前内核线程放置在由 event_word 参数锚定的列表上。 警醒 服务会唤醒该列表中的所有线程。

警醒 服务不会唤醒当前未在 埃斯莱普勒 功能中处于休眠状态的线程。 即,如果在线程调用事件的 埃斯莱普勒 服务之前对事件发出 警醒 操作,那么该线程仍将休眠,并等待该事件的下一个 警醒 操作。 这意味着使用此功能的例程必须确保在调用事件的 埃斯莱普勒 服务之前,不存在由于调用 警醒 服务而可能遗漏事件的计时窗口。

在将线程置于休眠状态之前, 埃斯莱普勒 服务还会解锁 lock_word 参数指定的常规锁定。 当线程唤醒时,它也会重新获得锁定。

事件列表的锚点 (由 event_word 参数指定) 必须先初始化为 EVENT_NULL ,然后才能首次使用。 在使用此锚点时,内核扩展不得改变此锚点。

注: 仅当锁定事件或锁定字时,才可以在禁用中断的情况下调用 埃斯莱普勒 服务。

标志参数的值

标志 参数控制信号如何影响等待事件的方式。 有三个标志可供 埃斯莱普勒 服务使用:

描述
EVENT_SIGRET 通过未屏蔽的信号指示等待事件的终止。 将返回值设置为 EVENT_SIG。
EVENT_SIGWAKE 通过未屏蔽的信号指示事件的终止。 此标志还指示将控制权从最后一个 塞廷普 服务转移到返回,并将返回值设置为 EINTR
EVENT_SHORT 指示不能终止等待的信号。 将 EVENT_SHORT 标志仅用于简短的,有保证的唤醒休眠。
注: EVENT_SIGRET 标志将覆盖 EVENT_SIGWAKE 标志。

执行环境

仅可从 流程环境 调用 埃斯莱普勒 内核服务。

返回值

描述
EVENT_SUCC 指示成功完成。
EVENT_SIG 指示已设置 EVENT_SIGRET 标志,并且等待已由信号终止。