誰能解釋演示瞭如何使用條件變量的信號被使用調用pthread_cond_broadcast廣播到所有等待的線程C代碼()?誰能解釋的條件變量的信號的C代碼使用調用pthread_cond_broadcast被廣播到所有等待的線程()?
回答
Dave Butenhof的着名書3.3節(http://www.amazon.com/Programming-POSIX-Threads-David-Butenhof/dp/0201633922)有一個很好的解釋。
此外,你可以找到/在http://www.domaigne.com/blog/computing/condvars-signal-with-mutex-locked-or-not廣播信號的很好的討論。
pthread_cond_broadcast()
應當多個線程可以基於條件變量等待被使用,但其中的一些線程可能不準備進行。 pthread_cond_signal()
可能會喚醒其中一個線程; pthread_cond_broadcast()
將它們全部喚醒,以便如果有任何可以繼續,將會有。
例如,我們可能有一個互斥鎖來保護兩個變量x
和y
。某些線程等待這個條件:
pthread_mutex_lock(&mutex);
while (x < 10)
pthread_cond_wait(&cond, &mutex);
而其他在此條件下等待:
pthread_mutex_lock(&mutex);
while (x < 10 || y < 5)
pthread_cond_wait(&cond, &mutex);
如果一個線程增加x
高於10,但留下小於5 y
,那麼它應該使用pthread_cond_broadcast(&cond)
,因爲任何線程都在等待第二個條件都還沒有準備好運行,所以我們必須保證從第一個條件中的至少一個線程被喚醒(如果有任何等待這個條件)。
有一點要記住正確的代碼是pthread_cond_signal()
是一種優化,僅此而已 - 如果你的代碼是正確的,那麼也應該如果每個pthread_cond_signal()
被pthread_cond_broadcast()
(但可能無法有效)更換工作。
感謝您的時間咖啡館..... – user1754940 2011-04-08 11:34:06
- 1. Ç調用pthread_cond_broadcast似乎廣播到所有COND變量
- 2. 等待的線程數和信號量
- 3. 將信號廣播到Linux中的所有線程
- 4. 調度等待信號量的進程
- 5. 在等待條件變量的許多信號中發送特定線程
- 6. C++ 11線程:多線程等待條件變量
- 7. C++:條件變量等待
- 8. 等待C++中的所有線程
- 9. 在POSIX中我可以保存被其他調用有條件等待的線程使用的信號。 (這些線程是從相同的過程)
- 10. 誰能解釋下面的代碼,請
- 11. 多線程 - 等待所有線程發信號
- 12. 如何從等待條件變量/信號量的線程池中喚醒線程?
- 13. C - Pthread_cond_signal - 信號最長等待線程
- 14. 已在條件變量等待調用中的中斷提升線程
- 15. 誰能解釋的代碼,這些基本的iOS線請
- 16. 跨線程事件信號(Obj-C)的同步/等待設計?
- 17. 讓所有等待的對象線程調用notifyAll的
- 18. 爲什麼等待的條件釋放鎖,但信號不?
- 19. C#等待來自所有線程的信號,然後再繼續
- 20. 沒有人在等待時發信號通知條件變量的意義?
- 21. 使用線程和信號量的代碼
- 22. 等待使用信號量時的分叉過程
- 23. 等待/信號(信號量)如何實現僞代碼「工作」?
- 24. 使用R代碼的條件變量
- 25. 一條線程如何讓條件變量而不是等待條件變量
- 26. 調用webservice的異步和等待所有線程完成
- 27. CountDownEvent不會等到所有信號都被調用
- 28. 如何等待pthread條件變量或信號?
- 29. 多線程代碼和條件變量的用法
- 30. CountdownEvent不等待所有線程發信號
感謝您的答覆krivenok .... – user1754940 2011-04-08 11:33:34