解锁内核服务
用途
将常规进程锁定解锁。
语法
#include <sys/types.h>
#include <sys/errno.h> void unlockl ( lock_word)
lock_t *lock_word;
lock_t *lock_word;
参数
| 项 | 描述 |
|---|---|
| lock_word | 指定该锁定字的地址。 |
描述
注: 提供 解锁 内核服务只是为了实现兼容性,不应该在新代码中使用,而应该使用简单锁定或 复杂锁定。
解锁 内核服务会将 常规锁定解锁。 只有锁的所有者才能将其解锁。 一旦锁定解锁,等待锁定的最高优先级线程 (如果有) 将成为可运行的线程,并且可能再次争用锁定。 如果至少有一个进程正在等待该锁定,那么将重新计算调用者的优先级。 抢先进行系统调用 讨论了系统调用在访问全局数据时如何使用 锁定内核服务 。
洛克勒 和 解锁 服务不会维护嵌套级别计数。 对 解锁 服务进行的单个调用将解锁调用者的锁定。 应该使用来自 洛克勒 服务的返回码来确定何时解锁该锁定。
注: 只有在锁定事件或锁定字的情况下,才能在禁用中断的情况下调用 解锁 内核服务。
执行环境
仅可从 流程环境 调用 解锁 内核服务。
返回值
解锁 服务没有任何返回值。
示例
对 解锁 服务的调用可以按如下所示进行编码:
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);