msem_lock 子例程
用途
锁定信号量。
库
标准 C 库 (libc.a)
语法
描述
msem_lock 子例程尝试锁定二进制信号量。
如果信号量当前未被锁定,那么它将被锁定,并且 msem_lock 子例程将成功完成。
如果信号量当前已锁定,并且 Condition 参数的值为 MSEM_IF_NOWAIT,那么 msem_lock 子例程将返回错误。 如果信号量当前已锁定,并且 Condition 参数的值为 0 ,那么在调用进程能够成功锁定信号量或发生错误情况之前, msem_lock 子例程不会返回。
通过共享公共 msemaphore 结构的多个进程对 msem_lock 和 msem_unlock 子例程的所有调用都像对调用进行序列化一样工作。
如果 msemaphore 结构包含对 msem_init 子例程的调用未产生的任何值,后跟对 msem_lock 和 msem_unlock 子例程的调用序列 (可能为空) , 结果未定义。 msemaphore 结构的地址很重要。 如果 msemaphore 结构包含从位于不同地址的 msemaphore 结构复制的任何值,那么结果是未定义的。
参数
| 项 | 描述 |
|---|---|
| Sem | 指向指定要锁定的信号量的 msemaphore 结构。 |
| Condition | 确定 msem_lock 子例程是否等待当前锁定的信号量解锁。 |
返回值
成功时, msem_lock 子例程返回值 0。 否则,返回值为-1,并设置errno全局变量来指示错误。
错误代码
如果 msem_lock 子例程不成功,那么 errno 全局变量设置为下列其中一个值:
| 项 | 描述 |
|---|---|
| 再次 | 指示为 Condition 参数指定了值 MSEM_IF_NOWAIT ,并且信号已锁定。 |
| EINVAL | 指示 Sem 参数指向指定已除去的信号量的 msemaphore 结构,或者 Condition 参数无效。 |
| EINTR | 指示 msem_lock 子例程被捕获的信号中断。 |