2相ロック 【ツーフェーズロック】 2PL / Two-Phase Locking / 2相ロッキングプロトコル
概要
2相ロック(ツーフェーズロック)とは、並列システムにおけるロック処理の方式の一つで、(複数の対象に)ロックを取得する段階と、それらを解放する段階を分ける方式。リレーショナルデータベースにおけるトランザクション処理などで用いられる。あるトランザクションを実行する際に、必要な資源に順にロックを獲得していき(成長相)、処理が終わったら順にロックを解放していく(縮退相)。ロックを解放してから再び別のオブジェクトのロックを獲得することが無いようにする。
並行に実行されるすべてのトランザクションが2相ロックに従うことで、すべてのデータアクセスが直列化され、途中で他のトランザクションにデータを書き換えられてしまい処理に矛盾を生じるデータの不整合を避けることができる。
このうち、ロックの解放をコミット時にまとめて行う方式を「厳密な2相ロック」(S2PL:Strict 2PL)、トランザクション開始時にロックの獲得をまとめて行う方式を「保守的な2相ロック」(C2PL:Conservative 2PL)という。
(2021.8.2更新)