2012-02-29 68 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將阻塞該任務,直到有可能 執行信號量的遞減,如果信號量在調用時當前的 值爲零。

相關問題