使用 sema_wait(3C) 可以一直阻塞调用线程,直到 sp 所指向的信号的计数变得大于零为止。计数变得大于零时,系统会以原子方式减小计数。
#include <thread.h> int sema_wait(sema_t *sp);
sema_wait() 在成功运行后返回 0。如果检测到以下任一情况,sema_wait() 将失败并返回对应的值。
EINVAL
sp 引用的信号无效。
EINTR
等待过程已被信号或 fork() 中断。