関係データベース)で使用されるロック手法である。ツーフェーズロックは以下のように分類される。ツーフェーズロックを指す。以下ではこれらについて解説する。以下の2つの原則がある。トランザクションTがあるオブジェクトをリード/ライトしようとしたとき、そのオブジェクトに共有/排他ロックを使用しなければならない。トランザクションTがかけた全ての排他ロックはTがコミットする際に解放される(コミット前ではない)。D={\begin{bmatrix}T1&T2\\S(A)&\\R(A)&\\&S(A)\\&R(A)\\&X(B)\\&R(B)\\&W(B)\\&Commit\\X(C)&\\R(C)&\\W(C)&\\Commit&\end{bmatrix}}}テキストで表すと、次のようになる。コミットされていないデータをリードすること、コミットされていないデータを更新すること、リードとライトの衝突などを防ぐ。従ってカスケーディングロールバック(トランザクションの中断によって発生するロールバックが複数のトランザクションを巻き込んでしまう現象)も防ぐことができる。いうのもライト操作を防ぐ排他ロックをトランザクションをコミットするまでかけているからである。デッドロックを防げない[編集]リアルタイムシステムではデッドロックを防ぐことは重要である。分散データベースや多重化されたフォールトトレラントシステムでは困難だろう。デッドロックが以下のような流れで発生する。かけたロックが外されるのを待つ。2つのトランザクションはその先に進むことができず、両者共にデッドロック状態になる。デッドロック問題には汎用の解決策は存在しない。従って、状況に応じて予防/対処するしかない。状況によっては、「銀行家のアルゴリズム」や「ロック獲得順の設定」のような対策によってデッドロックを防ぐこともできる。厳格な(Rigorous)ツーフェーズロックもある。これはトランザクションのコミットの際に共有ロックを含めた全ロックを解放するものである。ものに似ていて、以下のようになる。トランザクションTがあるオブジェクトをリード/ライトしようとしたとき、そのオブジェクトに共有/排他ロックを使用しなければならない。トランザクションはいずれかのロックを解放したら追加のロックをかけることができない。従って、トランザクションには成長期(ロック獲得期)と減退期(ロック解放期)がある。2PLは衝突直列化可能なスケジュールのみを許す。2PLとC2PLの違いは、C2PLがトランザクション開始前に必要な全ロックを獲得するという点にある。これによりトランザクションの途中でロックを獲得しようとしてデッドロックとなることがなくなる。比較して平均ロック獲得期間を減らすことができる。ロックの衝突が少ない状況では、C2PLは必要以上にロックを獲得するため、オーバヘッドが高くなる。トランザクションは必要とされるロックが全て獲得できるまでいかなるロックも獲得しないし、処理も開始できない。トランザクション毎にリード/ライトするデータを全て宣言する必要があり、これは必ずしも常に可能とは言えない。この項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスのもとで利用できます。追加の条件が適用される場合があります。詳細については利用規約を参照してください。Cookieに関する声明モバイルビュ。