pthread_cond_wait将线程置于等待状态

时间:2012-02-29 02:09:06

标签: c unix pthreads

pthread_cond_wait是否将调用线程置于等待状态,以便被pthread_cond_signal / pthread_cond_broadcast唤醒,以便它不会轮询和流失CPU?

另外,sem_wait是否将线程置于等待状态?如果我理解正确,互斥锁获取/释放方法会使线程在互斥锁上连续轮询,并且不会将线程置于等待状态。

2 个答案:

答案 0 :(得分:2)

是的,pthread_cond_wait,如果成功,会导致线程等到通知为止。这就是电话会议的目的。

sem_wait会使线程处于等待状态如果信号量无法递减。在它处于高状态时,呼叫将立即返回。

在大多数情况下,您无需担心锁是通过忙等待还是调度程序产生来实现的。无论哪种方式,您都可以获得保证的行为,通常库实施者将选择您运行的平台上最有效的方法。在某些情况下(你有一个以上的核心而且预期的等待时间很短)正忙着等待。

答案 1 :(得分:0)

是的,调用pthread_cond_wait()的任务将进入等待状态:

   pthread_cond_wait atomically  releases mutex and cause the
   calling thread to block on the condition  variable  cond

在当前linux的内部,它使用futex来完成这些工作。

sem_wait将阻止该任务,直到它成为可能 如果信号量当前,则执行信号量的减量 调用时值为零。