當使用boost::conditional_variable
,ACE_Conditional
或直接pthread_cond_wait
時,是否有任何等待本身的開銷?這是更具體的問題那麻煩是:有條件的等待開銷
- 等待的線程是不定期之後,等待到期之前將其安排回來,然後再不定期或將留到不定期的信號?
wait
定期獲取互斥鎖嗎?在這種情況下,我猜測每次迭代會浪費系統調用的一些CPU時間來鎖定和釋放互斥鎖。它是不斷地獲取和釋放互斥體?- 此外,信號和從
wait
返回之間需要多少時間?
Afaik,當使用信號量時,獲取調用的響應性取決於調度程序的時間片大小。它如何在pthread_cond_wait
中工作?我認爲這是平臺依賴。我對Linux更感興趣,但如果有人知道它在其他平臺上如何工作,它也會有所幫助。
還有一個問題:是否有任何額外的系統資源分配給每個條件?我不會在我的代碼中創建30000個互斥體,但是我應該擔心使用同一個互斥體的30000個條件?
感謝您的回答。我需要澄清 - 在等待線程未計劃之後,是否會在等待過期之前重新安排計劃,然後再次取消計劃,否則它將保持未計劃狀態直至發出信號? – FireAphis 2010-10-19 06:26:43
@Fire:我不確定你的意思是「過期」。你需要像'while(!condition())pthread_cond_wait(...);'那樣調用函數,其中'condition'是任何布爾必須是'true'來繼續執行,所以如果'cond_wait'提前返回,它再次。但正如我所說,許多操作系統從來不會這樣做,即使他們這樣做,通常也不是問題。如果你有一個超時,那麼表單是'while(!condition()&& pthread_cond_timedwait(...)!= ETIMEDOUT);'。 – Potatoswatter 2010-10-19 15:41:05