私はthe completely fair solution to the Readers/Writers problemを経由していましたが、ロックを解除する順序はわかりにくいようです。 serviceQueue
ロックを解放する順序と、reader()
機能のロックをreadCountAccess
解除する順序を入れ替えることができるかどうかを知りたいと思います。順序が重要でない場合、この方法でロックを解放するのは逆の直観的なようです。しかし、逆の順序でロックを解除する際に何が間違っているのかは分かりません(最初はreadCountAccess
と、その後は、次にserviceQueue
ロック)。リーダ/ライターの同期 - 公正なバージョンのロックを解除する順
1
A
答えて
1
これはおそらく、より広範なロック(この場合はserviceQueue
)を解放することを正当化できる日からの残りの部分です。狭いロック。
それぞれの取得または解放に1時間単位がかかるとします。それぞれの操作には0単位が必要です。リーダは時間0でリーダカウンタを増やしただけで、サービス待機キューには次のリーダーが並んでいます。
readCountAccess
場合は、最初にリリースされていないとserviceQueue
第二は、次の読者は一度以前よりもserviceQueue
ミューテックスを取得できた3.したがって、それがリードロック登録式で行うことができる最も早い時刻6.でありますここで恩恵を受けるパーティーは他の読者が終了を待っていることになりますが、それはあまり重要ではありません。resourceAccess
もリリースできないはずです。serviceQueue
は、次の読者がこれはそれが早けれのように読み取りロック登録セレモニーで行うことができることを意味し、時間2で早くもserviceQueue
mutexを獲得でき、第1、第readCountAccess
二解放される一方場合時間5.
が、私はまだかかわらず、左右対称の方式を使用してロックを解除することを好むだろう - それはあまりエラーが発生しやすいですが、それは、より広範な認識を持っており、現在はそれがバージョンよりもどのような方法でさらに悪い立証責任上記の疑いの肩の上に横たわるでしょう。
関連する問題
- 1. 非同期タスクでdispatch_queue_tをロックしてロック解除します
- 2. ユーザーアカウントのロック解除
- 3. 画面ロックとロック解除
- 4. Androidのライフサイクルとロック/ロック解除のデバイス
- 5. 目的C NSLock:異なるスレッドでNSLockをロックおよびロック解除する
- 6. iPhoneとアクセシビリティのロックを解除する
- 7. ファイルのロックを解除する
- 8. DJangoのロックと同期
- 9. ロックを解除しないでファイルをロックして削除する
- 10. Mac App Storeのバージョンがシステムに存在する場合、アプリの開発者IDバージョンのロックを解除する
- 11. InApp購入なしのコンテンツのロックを解除する
- 12. ロックを解除する - GameCenter iPhone
- 13. ロック解除ロック画面AppleScriptは
- 14. svnのファイルの同期バージョン
- 15. プログラムによるWindowsのロック解除
- 16. Rsyncと同期の順序
- 17. Androidでフォルダをロックしたりロックを解除するには
- 18. ロックを解除すると、SynchronizationLockException(同期化されていないコードブロックからオブジェクト同期メソッドが呼び出されました)。
- 19. 同期フレームワークスコープのバージョン管理
- 20. asp.netメンバーシップのユーザーをロック解除
- 21. VS 2008のasp.net mvcテンプレートをロック解除
- 22. Direct3DのVertexBufferロック()と異なるD3DPOOLによって実装ロック解除()関数
- 23. 異なるバージョンのオブジェクトを同期する
- 24. Oracleでのロックの解除10
- 25. 同期ロックとリエントラントロックの違いは?
- 26. SCJD同期ステートメントとロックの比較
- 27. Visual Studio 2008:同じプログラムの2つのバージョンを公開する
- 28. jqGridのロックとロック解除の方法は?
- 29. WPim7を模倣するページアニメーションのロックを解除する
- 30. Androidオープンソースプロジェクトの顔ロック解除コード?