トランザクションA (処理A1→処理A2の順に実行する) とトランザクションB
(処理B1→処理B2の順に実行する)が、データベースの資源SとTに対し、
次のように処理A1→処理B1→処理A2→処理B2 の順で専有ロックを
要求する場合、デッドロックが発生する資源の組合せはどれか。
なお、ロックは処理開始時にかけ、トランザクション終了時に解除する。
┌───┐ ┌───┐ ┌───┐
トランザクションA │処理A1│→│処理A2│→│COMMIT│
└───┘ └───┘ └───┘
┌───┐ ┌───┐ ┌───┐
トランザクションB │処理B1│→│処理B2│→│COMMIT│
└───┘ └───┘ └───┘
───────────────────> 時刻
┌─┬─┬─┬─┐
│A1│B1│A2│B2│
┌─┼─┼─┼─┼─┤
│ア│S│S│T│T│
├─┼─┼─┼─┼─┤
│イ│S│T│T│S│
├─┼─┼─┼─┼─┤
│ウ│T│S│T│S│
├─┼─┼─┼─┼─┤
│エ│T│T│S│S│
└─┴─┴─┴─┴─┘
デッドロックは例えば、今、処理Aが資源Sを使っていて、
次に資源Tを使おうとしている一方で、
処理Bは資源Tを使っていて、次に資源Sを使おうとしている時、
処理Aも処理Bも互いに相手の資源解除を待ち続けていて、
固まってしまったようになる現象のこと。
イの場合、
@トランザクションAの処理A1が資源Sを専有ロックする。
AトランザクションBの処理B1が資源Tを専有ロックする。
BトランザクションAの処理A2が資源Tを使おうとするが、
処理B1が専有ロックしているので、資源Sを専有ロック
したまま、待ち状態になる。
CトランザクションBの処理B2が資源Sを使おうとするが、
資源Sが専有ロックされているため、待ち状態になる。
こうして、互いのトランザクションが待ち状態になり、デッドロック状態となる。
EXCEL VBAのご相談なら ファーストマクロ へ
タグ:デッドロック