t1〜t10の時刻でスケジュールされたトランザクションT1〜T4がある。
時刻t10でT1がcommitを発行する直前の、トランザクションの待ちグラフを作成した。
aに当てはまるトランザクションはどれか。
ここで、SELECT(X )は共有ロックをかけて資源X を参照することを表し、update(X )は専有ロックをかけて資源X を更新することを表す。
これらのロックは、commitされるまでアンロックされないものとする。
また、トランザクションの待ちグラフの矢印は、Ti →Tj としたとき、Tj がロックしている資源のアンロックを、Ti が待つことを表す。
[トランザクションのスケジュール]
時刻 |
トランザクション |
T1 |
T2 |
T3 |
T4 |
t1 |
select(A) |
− |
− |
− |
t2 |
− |
select(B) |
− |
− |
t3 |
− |
− |
select(A) |
− |
t4 |
− |
− |
− |
select(B) |
t5 |
− |
− |
− |
update(B) |
t6 |
select(C) |
− |
− |
− |
t7 |
− |
select(C) |
− |
− |
t8 |
− |
update(C) |
− |
− |
t9 |
− |
− |
update(A) |
− |
t10 |
commit |
− |
− |
− |
|
[トランザクションの待ちグラフ]
答え イ
【解説】
時刻を追って処理を確認すると、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
これを図にまとめると
になる。
【キーワード】
・ロック
【キーワードの解説】
- ロック(lock)
複数の処理(トランザクション)が動作している環境で、複数の処理が同じデータ(資源)に同時にデータの書換えを行うと、データに不整合が生じるので、書き換えを行う前に他の処理からのアクセスを制限する処理をロックといいます。(排他処理)
もっと、「ロック」について調べてみよう。
戻る
一覧へ
次へ
|