使用 cond_wait(3C) 可以原子方式释放 mp 所指向的互斥锁,并导致调用线程基于 cv 所指向的条件变量阻塞。阻塞的线程可以由 cond_signal() 或 cond_broadcast() 唤醒,也可以在信号传送或 fork() 将其中断时唤醒。
cond_wait() 每次返回时,互斥锁均处于锁定状态并由调用线程拥有,即使返回错误时也是如此。
#include <thread.h> int cond_wait(cond_t *cv, mutex_t *mp);
cond_wait() 在成功运行后返回 0。如果检测到以下任一情况,cond_wait() 将失败并返回对应的值。
EFAULT
描述:cv 指向的地址非法。
EBUSY
描述:等待过程已被信号或 fork() 中断。