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 标志,并且等待已由信号终止。 |