我正在通過the completely fair solution to the Readers/Writers problem,釋放鎖的順序似乎讓我感到困惑。我想知道我們是否可以在reader()
函數中交換釋放serviceQueue
鎖和readCountAccess
鎖的順序。如果順序無關緊要,以這種方式釋放鎖看起來是違反直覺的。但我沒有看到以相反的順序釋放鎖定有什麼問題(首先,readCountAccess
和,然後,然後serviceQueue
鎖定)。讀者/作家同步 - 釋放鎖公平版本的順序
1
A
回答
1
這可能是一個剩餘時間,如果這不會影響正確性,那麼您可以首先釋放更大的鎖(在這種情況下爲serviceQueue
),因爲另一個線程可以在釋放更多時立即繼續獲取它窄鎖。假設每個獲取或釋放需要1個時間單位,每個其他操作需要0個時間單位,讀者只是在時間0時遞增讀取器計數器,並且在服務等待隊列中還有另一個讀取器在線。
如果
readCountAccess
被釋放第一和serviceQueue
秒,接下來的讀者可能會不早於時間獲取serviceQueue
互斥。因此它可以與讀鎖註冊儀式來完成最早是在時間6。這裏的受益方將是其他讀者等待退出,並且他們不那麼重要,因爲他們不應該也能夠發佈resourceAccess
(因爲我們原來的讀者已經註冊了)。如果另一方面
serviceQueue
被釋放第一和readCountAccess
秒,接下來的讀者可以在時間2早獲得serviceQueue
互斥這意味着它可以與讀鎖註冊儀式,早在做時間5
我還是更喜歡使用對稱方案雖然解鎖 - 這是容易出錯少,它具有更廣泛的認識,並舉證,目前以任何方式更糟糕的是比版本以上將落在懷疑者的肩上。
相關問題
- 1. 關於讀者/作家同步
- 2. C讀者作家線程鎖解鎖
- 3. 讀者 - 作者同步問題
- 4. 許多讀者,一位作家:我需要同步這個嗎?
- 5. 一位讀者,許多作家
- 6. 同步工件版本與Maven釋放過程
- 7. ReentrantReadWriteLock - 爲什麼讀者不能獲取作家的鎖?
- 8. 操作系統:混亂,使溶液中的第一讀者,作家同步問題
- 9. 服務工作者同步或順序提取
- 10. SynchronizationLockException(對象同步方法從非同步代碼塊調用。)釋放鎖時
- 11. 線程同步(鎖定),只釋放到後進線程
- 12. 同步方法可能不會釋放鎖
- 13. 如果我從同步塊返回,鎖何時釋放?
- 14. 軟件版本更改BinaryReader的順序
- 15. H2數據庫釋放鎖
- 16. 同步多個閱讀器,單個作者?
- 17. 讓讀者/作家線程進入R/W/R/W
- 18. 行家釋放多模塊插件,具有不同SCM標籤和版本
- 19. 多個讀者 - Akka的單人作家
- 20. 線程同步執行操作順序
- 21. 鎖,工藝和釋放JDBC
- 22. IDirect3DDevice9釋放死鎖
- 23. 升級讀鎖而不釋放C++ 11中的第一個鎖?
- 24. 不同國家的Playstore版本不同?
- 25. 什麼時候讀者/作家/流被確定爲開放?
- 26. 1作家,男讀者消耗相同的項目
- 27. 採集/釋放與順序一致性存儲器順序
- 28. 爲什麼我的程序的異步版本比同步版本慢?
- 29. System.Collections.Generic.SortedList的同步版本?
- 30. node.js http.get的同步版本