我知道pthread_cond_wait可以解鎖附帶的互斥鎖。我想找到的是pthread_cond_wait的源代碼,並找到解鎖互斥代碼。如果問題很愚蠢,請諒解。 :)。我必須下載並檢查哪個圖書館。我正在使用Ubuntu。pthread_cond_wait解鎖附帶的互斥鎖。源代碼?
1
A
回答
3
pthread_cond_*
函數和pthread_mutex_*
函數是NPTL的一部分,它現在是任何現代Linux機器上的glibc
的一部分。最新版本是glibc-2.11.1
,您可以在GNU glibc download site上找到源代碼。
2
另一種選擇是OpenSolaris source;如果你對linux感興趣,也就是glibc,@David Schwartz的答案可能更「準確」。
0
雖然這不完全是您的問題的答案,但互斥鎖解鎖發生的重要方面是必須在之後執行條件變量結構更新以反映服務員存在。這是標準的意思,當它說功能「原子」解鎖互斥和等待。否則,就會出現相同的競爭條件,就像在調用pthread_cond_wait
之前自己解鎖互斥體一樣:另一個線程可以獲取互斥體,並在檢查謂詞(並且發現它爲假)之後修改謂詞依賴的狀態,但在調用之前pthread_cond_wait
。然後,你會錯過信號,並繼續等待cond var,或許永遠。
相關問題
- 1. pthread_cond_wait不解鎖互斥鎖
- 2. Multile pthread_cond_wait喚醒並保持互斥鎖
- 3. 互斥鎖/解鎖命令
- 4. 互斥鎖和鎖
- 5. 瞭解互斥鎖類
- 6. 鎖定多個互斥鎖
- 7. 在互斥代碼中發生死鎖
- 8. 互斥/鎖定與範圍/代碼塊
- 9. 使用waitKey時,「試圖解鎖未被鎖定的互斥鎖」
- 10. 訪問類數據時替代互斥鎖/解鎖
- 11. pthread_cond_wait()不釋放互斥鎖的可能原因?
- 12. pthread互斥鎖兩個線程互鎖鎖定/解鎖是否有效?
- 13. 帶互斥鎖的WCF Web方法
- 14. pthread_getspecific和互斥鎖
- 15. 釋放互斥鎖。
- 16. 實現互斥鎖?
- 17. 嘗試鎖互斥鎖或等待,直到解鎖
- 18. 呼叫調用pthread_cond_wait沒有鎖定互斥
- 19. pthread_cond_wait /信號和互斥鎖未按預期方式工作
- 20. 鎖定互斥鎖的分段錯誤
- 21. 成功的互斥鎖鎖定
- 22. 多線程互斥鎖可以使用多個互斥鎖
- 23. 哪裏解鎖pthread中的互斥?
- 24. 在C++ 98互斥鎖中鎖定變量共享數據互斥鎖
- 25. 解鎖從定時接收互斥解鎖
- 26. 南特的互斥鎖
- 27. 互斥鎖的順序
- 28. 永久互斥鎖造成死鎖?
- 29. C# - 鎖定互斥鎖問題
- 30. 函數可以鎖定互斥鎖嗎?
應該指出的是,這個實現有一些嚴重的未解決的錯誤,其中很多連接到:http://sourceware.org/bugzilla/show_bug.cgi?id=13165 – 2012-02-02 17:16:21
@R ..哇,謝謝爲鏈接。這是非常不幸的,這些都是不正確的condvar實施的明確跡象。 – 2012-02-02 19:37:35
是的。這一切似乎都源於他們正在試圖解釋清醒次數的一些黑魔法,顯然是爲了消除所有虛假清醒。然而,我已經從bug報告中運行了測試用例,同時針對NPTL condvar實現和我自己的實現,它們不使用任何這樣的黑客,也沒有能夠得到任何虛假的wakes,所以我的結論如此遠遠是他們防止虛假喚醒的努力是不必要的,並且(由於錯誤)簡直是有害的... – 2012-02-03 00:42:27