2011-04-19 67 views
3

我注意到當我對條件變量執行等待操作時,它立即返回。其結果是,執行下面的僞代碼時,被在此循環中使用一個CPU的100%:條件變量

int main(void) { 

boost::condition_variable cond; 
boost::mutex mut; 
bool data_ready = false; 

boost::unique_lock<boost::mutex> lock(mut); 
while (!data_ready) { 
    cond.wait(lock); 
} 


return 1; 

}

我希望調用cond.wait(lock)把線程的狀態它不消耗任何CPU,但事實並非如此。

那麼問題在哪裏呢?我從boost文檔中獲取了上述代碼。

(我使用升壓1.44)

感謝,

紀堯姆

回答

2

A condition_variable::wait可能會返回虛假。也就是說,沒有被通知。虛假回報的頻率是實施質量的問題。

在我的機器上,我把你的代碼,改爲使用std :: condition_variable(新的C++ 11),並運行它。它掛着沒有使用CPU。

這聽起來像是在你的平臺上的boost實現(boost有不同的windows和pthreads實現),虛假地喚醒自己試圖確保它不會錯過通知。

+0

「虛假」事件是每個土星中的一個與木星的情況一致。這值得一提,但不應該用來證明這種情況。例如,當發生系統異常(sigbus或某種信號)時,可能會發生虛假喚醒。這不會一直髮生,他還有其他問題。 – 2014-03-24 02:28:13

1

由於在程序中沒有其他線程,這是非常明智的線程庫立即從調用pthread_cond_wait返回()或你的程序將永遠睡眠。