我知道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. 互斥鎖/解鎖命令
- 2. 互斥鎖和鎖
- 3. 在互斥代碼中發生死鎖
- 4. 訪問類數據時替代互斥鎖/解鎖
- 5. pthread互斥鎖兩個線程互鎖鎖定/解鎖是否有效?
- 6. 實現互斥鎖?
- 7. 鎖定互斥鎖的分段錯誤
- 8. 成功的互斥鎖鎖定
- 9. 哪裏解鎖pthread中的互斥?
- 10. 解鎖從定時接收互斥解鎖
- 11. 互斥鎖的順序
- 12. 南特的互斥鎖
- 13. 永久互斥鎖造成死鎖?
- 14. 遞歸和非遞歸鎖(互斥鎖)
- 15. C# - 鎖定互斥鎖問題
- 16. 函數可以鎖定互斥鎖嗎?
- 17. 鎖定互斥鎖vs訪問磁盤
- 18. 爲什麼互斥已經解鎖
- 19. 鎖,監視器,互斥
- 20. 互斥鎖無數次
- 21. 「安全」處理互斥鎖?
- 22. 當互斥鎖不夠時?
- 23. 互斥鎖不起作用
- 24. 需要釋放互斥鎖?
- 25. C - 互斥鎖屬性
- 26. 互斥鎖如何工作?
- 27. 獲取互斥鎖列表?
- 28. 死鎖模擬::互斥
- 29. 使用許多互斥鎖
- 30. static_lock_guard靜態互斥鎖嗎?
應該指出的是,這個實現有一些嚴重的未解決的錯誤,其中很多連接到: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