ツーフェーズロック
保守的な2PL (C2PL) はデッドロックを防ぐ。
2PLとC2PLの違いは、C2PLがトランザクション開始前に必要な全ロックを獲得するという点にある。これによりトランザクションの途中でロックを獲得しようとしてデッドロックとなることがなくなる。
ロックの衝突が激しい状況では、C2PLでのトランザクションは途中でブロックされないので、2PL や Strict 2PL に比較して平均ロック獲得期間を減らすことができる。
ロックの衝突が少ない状況では、C2PLは必要以上にロックを獲得するため、オーバヘッドが高くなる。
また、トランザクションは必要とされるロックが全て獲得できるまでいかなるロックも獲得しないし、処理も開始できない。さらに、トランザクション毎にリード/ライトするデータを全て宣言する必要があり、これは必ずしも常に可能とは言えない。このような制限があるため、C2PL はあまり使われていない。
表示
編集