sem_trywait 和 sem_wait 子例程

用途

锁定信号量。

标准 C 库 (libc.a)

语法

#include <semaphore.h>

int sem_trywait (sem)
sem_t *sem;


int sem_wait (sem)
sem_t *sem;

描述

sem_trywait 子例程仅在信号量当前未锁定时 (即,如果信号量值当前为正数时) 锁定 sem 参数引用的信号量。 否则,它不会锁定信号量。

sem_wait 子例程通过对该信号量执行信号量锁定操作来锁定由 sem 参数引用的信号量。 如果信号量值当前为零,那么调用线程不会从调用返回到 sem_wait 子例程,直到它锁定信号量或调用被信号中断为止。

成功返回时,信号量的状态将被锁定,并且将保持锁定状态,直到执行 sem_post 子例程并成功返回为止。

传递信号可中断 sem_wait 子例程。

参数

描述
sem 指定要锁定的信号量。

返回值

如果调用进程成功执行信号锁定操作,那么 sem_trywaitsem_wait 子例程返回零。 如果调用不成功,则半寄存器的状态保持不变,子程序返回-1并设置errno以指示错误。

错误代码

sem_trywaitsem_wait 子例程在下列情况下失败:
描述
EACCES 许可权被拒绝访问未命名的信号量。
再次 信号量已被锁定,因此它不能被 sem_trywait 子例程立即锁定。
Efault 用户地址无效。
EIDRM 在所需操作期间除去了信号量。
EINTR 信号中断了子例程。
EINVAL sem 参数未引用有效的信号量。
ENOMEM 内存不足,无法执行必需的操作。
ENOTSUP 已执行 checkpoint-restart'ed的进程不支持此功能。