答え イ
【解説】
@〜Jの処理を行ったときのデータa、bの状態を見ていく。
|
処理の内容 |
データaの状態 |
データbの状態 |
@ |
T1が「READ a」でデータaを共有ロック |
T1が共有ロック |
− |
A |
T2が「UPDATE b」でデータbを占有ロック |
T1が共有ロック |
T2が占有ロック |
B |
T1が「READ b」でデータbを共有ロックを行いたいが、データbはT2が占有ロックしているので、T1は資源解放待ち |
T1が共有ロック |
T2が占有ロック |
C |
T2が「ROLLBACK」でデータbの占有ロックを解除、T1がデータbの解放待ちなので共有ロック |
T1が共有ロック |
T1が共有ロック |
D |
T3が「READ b」でデータbを共有ロック
(データbはT1が共有ロック状態なので共有ロックは可) |
T1が共有ロック |
T1、T3が共有ロック |
E |
T3が「UPDATE a」でデータaの占有ロックを行いたいが、データaはT1が共有ロックしているので、T3はデータaの資源解放待ち |
T1が共有ロック |
T1、T3が共有ロック |
F |
T1が「UPDATE b」でデータbの占有ロックを行いたいが、データbはT3も共有ロックしているので、T1はデータbの資源解放待ち |
T1が共有ロック |
T1、T3が共有ロック |
Fの処理でT1とT3が資源解放待ち状態になってしまいデッドロックになる。(イ)