lockl 内核服务

用途

锁定常规进程锁定。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/lockl.h>
int lockl ( lock_word,  flags)
lock_t *lock_word;
int flags;

参数

描述
锁定字 指定该锁定字的地址。
标志 指定用于控制正在等待锁定的标志。 标志 参数用于控制信号如何影响等待锁定的方式。 这四个标志是:
LOCK_NDELAY
控制调用者是否等待该锁定。 设置标志会导致请求被终止。 锁定将分配给调用者。 如果未设置此标志,那么在将锁定分配给调用者之前,调用者将等待锁定未被另一个进程拥有。
LOCK_SHORT
防止信号终止锁定等待。 LOCK_SHORTlockl内核服务的默认标志。 此标志会导致非抢先睡眠。
LOCK_SIGRET
导致等待锁定由未屏蔽的信号终止。
LOCK_SIGWAKE
通过解屏蔽信号终止对锁的等待,并通过setjmpx内核服务将控制权转移到最后一个操作的返回值。
注意: LOCK_SIGRET标志优先于 LOCK_SIGWAKE标志。

描述

注意: lockl内核服务仅用于兼容,不应在新代码中使用,新代码应使用简单锁复杂锁

lockl内核服务为传统锁加锁

该锁字可以位于共享内存中。 在调用 locklunlockl服务时,它必须在进程的地址空间中。 内核仅在调用者进程下执行时才访问锁定字。

lock_word 参数通常是数据结构的一部分,该数据结构描述了由锁定管理的资源。 在首次调用lockl服务之前,必须将此参数初始化为LOCK_AVAIL值。 只有锁定解锁服务才能在锁使用时更改该参数。

锁定服务是可嵌套的。 调用者应使用LOCK_SUCC值来确定何时调用unlockl服务来解锁传统锁。

服务会暂时为所有者分配该锁最受欢迎的等待者的进程优先级。

在终止或离开内核方式之前,进程必须释放所有锁定。 当内核进程拥有任何锁定时,不会向这些进程传递信号。 内核扩展和设备支持编程概念》中的 "了解系统调用执行"讨论了系统调用在访问全局数据时如何使用lockl服务。

执行环境

lockl内核服务只能从进程环境中调用。

返回值

描述
LOCK_SUCC flags参数设置为 LOCK_NDELAY 时,表示进程尚未拥有该锁,或者该锁未被其他进程拥有。
锁定/非标准 指示当 标志 参数设置为 LOCK_NDELAY时,该进程已拥有该锁定或该锁定未由另一个进程拥有。
锁定失败 标志 参数设置为 LOCK_NDELAY时,指示该锁定由另一个进程拥有。
LOCK_SIG 指示当 标志 参数设置为 LOCK_SIGRET时,等待将通过信号终止。