使用 sem_trywait(3RT) 可以在计数大于零时,尝试以原子方式减小 sem 所指示的信号计数。
int sem_trywait(sem_t *sem);
#include <semaphore.h> sem_t sem; int ret; ret = sem_trywait(&sem); /* try to wait for semaphore*/
此函数是 sem_wait() 的非阻塞版本。sem_trywait() 在失败时会立即返回。
sem_trywait() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,该函数将失败并返回对应的值。
EINVAL
描述:sem 所指示的地址非法。
EINTR
描述:此函数已被信号中断。
EAGAIN
描述:信号已为锁定状态,因此该信号不能通过 sem_trywait() 操作立即锁定。