2012-02-29 57 views
2

pthread_cond_wait是否将调用线程置于等待状态,以便由pthread_cond_signal/pthread_cond_broadcast唤醒,以便它不轮询并搅动CPU?does pthread_cond_wait使线程处于等待状态

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

回答

2

是的,pthread_cond_wait成功时会导致线程等待直到通知。这是电话会议的目的。

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

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

+0

是的,但知道锁的行为有助于我们编写更好的算法 – user236215 2012-02-29 03:21:34

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将阻塞该任务,直到有可能 执行信号量的递减,如果信号量在调用时当前的 值为零。