私は、マルチプロセッサプログラミングのアート研究してきた1を、そのテキストはちょうどあなたが参照本のように、明確さに欠けています。TAMPPからの引用は次のとおりです。
引用1(ロックフリーの定義)
一部のメソッド呼び出しが有限のステップ数で無限に終了することが保証される場合、メソッドはロックフリーです。
引用2(ノンブロッキングの定義)
totalメソッドの保留中の呼び出しは、別の保留中の呼び出しが完了するのを待つ必要はありません。
引用3(ロックフリーは非ブロッキングであると主張する)
待機なしおよびロックなしのノンブロッキング進行状況条件は、システムがスレッドをスケジュールする方法とは無関係に、全体として計算が進行することを保証します。
問題は、引用3の主張が引用1の定義に明らかに従わないことです。すでに述べたように、同期キューは引用1を満たしているようです。
特に、引用3の非常にあいまいな句「システムがスレッドをスケジュールする方法とは無関係」に注意してください。これの前に「スレッドスケジューリングシステム」の正式な説明はありません。そのため、定義の意味についての先入観に基づいてプロパティを再構築する必要があります。
- システムは常にいくつかのスレッドの命令を実行します。
- 特定のスレッドの命令を実行することはありません。
- すべてのスレッドが検討中のメソッドを呼び出しています。
そのようなシステムでは、ブロッキングメソッドをロックフリーにすることはできません。ロックを保持しているスレッドの実行が再度スケジュールされない場合、有限数のステップでメソッド呼び出しを完了できる他のスレッドはありませんが、メソッドのステップを実行しているいくつかのスレッド。最終的に各スレッドにCPU時間を与えることを保証する、より現実的なシステムの場合、定義には非ブロッキングプロパティを明示的に含める必要があります。
ロックフリーの定義を修正
メソッドは、それが非ブロッキングである場合にロックフリーであり、さらに、いくつかのメソッド呼び出しが有限数のステップで無限に終了することを保証します。
1 Maurice Herlihy、Nir Shavit、Art of Multiprocessor Programming、Elsevier 2008、pp.58-60