ロックにまつわる問題
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/26 22:08 UTC 版)
「ロック (計算機科学)」の記事における「ロックにまつわる問題」の解説
ロックによるリソース保護とスレッド/プロセスの同期には以下のような問題がある: ブロックする方法であるため、スレッド/プロセスは他が確保しているロックが解放されるのを待たなければならない。 ロックは保守的な手法である。何故なら、スレッドは競合が発生すると予想される場合には常にロックを確保しなければならず、実際には競合が発生することは滅多にない。保守的手法であるがゆえに不必要なオーバヘッドが生じる。 ロックは故障や障害に無防備である。あるスレッドがロックを獲得したまま終了すると、他のスレッドはそのロックを獲得しようとして永遠に待ち続けるかもしれない。 ロックを使用したプログラミングはデッドロックなどのバグを作りこみやすい。 優先順位の逆転。低優先度のスレッド/プロセスがロックを獲得しているために高優先度のスレッド/プロセスがブロックされるという現象が発生する。 あるスレッドがロックを獲得した状態でタイムスライスを使い切るとかページフォールトなどで状態が変化すると、ロック確保期間が長期化して他のスレッドが待たされる。 デバッグが困難。ロックに関わるバグは時系列のイベントに左右されるため、再現させるのが難しい。 ロック機構が正しく機能するにはその状態を保持できるだけのリソースが確保されている必要がある。リソースが確保できない場合、クラッシュするよりは失敗するほうがよいが、例えばロック機構が「(何らかの理由で)ロックを獲得できませんでした」とエラーを返してくる可能性があるなら、アプリケーションはその状況にうまく対処できなければならない。そのためにはアプリケーションの論理設計の段階から考慮する必要がある。 ロックを避ける並行性制御戦略としてブロックしない同期手法を使うことがあげられる。例えば、lock-freeプログラミング技法やトランザクショナルメモリなどがある。しかし、そういった技法を使ったとしてもロックにまつわる問題を全て完全に回避できるわけではない。 どんな並行性制御戦略でも、OSのより基礎的なレベルでの実際のロック機構の実装を必要とし、単にアプリケーションのレベルで実装の詳細をロックを必要としないように見せているだけである。「問題」は依然として存在するが、それを扱うのはアプリケーションではない。実際、ロック機構は最終的にはCPUハードウェアの提供する不可分操作技法に依存している。
※この「ロックにまつわる問題」の解説は、「ロック (計算機科学)」の解説の一部です。
「ロックにまつわる問題」を含む「ロック (計算機科学)」の記事については、「ロック (計算機科学)」の概要を参照ください。
- ロックにまつわる問題のページへのリンク