t1〜t10の時刻でスケジュールされたトランザクションT1〜T4がある。
時刻t10でT1がcommitを発行する直前の、トランザクションの待ちグラフを作成した。
aに当てはまるトランザクションはどれか。
ここで、SELECT(X )は共有ロックをかけて資源X を参照することを表し、update(X )は専有ロックをかけて資源X を更新することを表す。
これらのロックは、commitされるまでアンロックされないものとする。
また、トランザクションの待ちグラフの矢印は、Ti →Tj としたとき、Tj がロックしている資源のアンロックを、Ti が待つことを表す。
[トランザクションのスケジュール]
|
[トランザクションの待ちグラフ]
ア | T1 |
イ | T2 |
ウ | T3 |
エ | T4 |
答え イ
【解説】
時刻を追って処理を確認すると、t1〜t4はselect()なのでアンロック待ちは発生しない。
t5のT4のupdate(B)では専有ロックをするために、T2のアンロック待ちが発生する。T4→T2
t6、t7もselect()なのでアンロック待ちは発生しない。
t8のT2のupdate(C)では専有ロックをするために、T1のアンロック待ちが発生する。T2→T1
t9のT3のupdate(A)では専有ロックをするために、T1のアンロック待ちが発生する。T3→T1
これを図にまとめると
になる。
【キーワード】
・ロック