ロック (計算機科学)
ロックによるリソース保護とスレッド/プロセスの同期には以下のような問題がある:
ブロックする方法であるため、スレッド/プロセスは他が確保しているロックが解放されるのを待たなければならない。
ロックは保守的な手法である。何故なら、スレッドは競合が発生すると予想される場合には常にロックを確保しなければならず、実際には競合が発生することは滅多にない。保守的手法であるがゆえに不必要なオーバヘッドが生じる。
ロックは故障や障害に無防備である。あるスレッドがロックを獲得したまま終了すると、他のスレッドはそのロックを獲得しようとして永遠に待ち続けるかもしれない。
ロックを使用したプログラミングはデッドロックなどのバグを作りこみやすい。
優先順位の逆転。低優先度のスレッド/プロセスがロックを獲得しているために高優先度のスレッド/プロセスがブロックされるという現象が発生する。
あるスレッドがロックを獲得した状態でタイムスライスを使い切るとかページフォールトなどで状態が変化すると、ロック確保期間が長期化して他のスレッドが待たされる。
デバッグが困難。ロックに関わるバグは時系列のイベントに左右されるため、再現させるのが難しい。