pthread_cond_wait是否将调用线程置于等待状态,以便被pthread_cond_signal / pthread_cond_broadcast唤醒,以便它不会轮询和流失CPU?
另外,sem_wait是否将线程置于等待状态?如果我理解正确,互斥锁获取/释放方法会使线程在互斥锁上连续轮询,并且不会将线程置于等待状态。
答案 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将阻止该任务,直到它成为可能 如果信号量当前,则执行信号量的减量 调用时值为零。