2相ロッキングプロトコルに従ってロックを獲得するトランザクションA、Bを図のように同時実行した場合に、デッドロックが発生しないデータ処理順序はどれか。ここで、read
と update の位置は、アプリケーションプログラムでの命令発行時点を表す。また、データWへの read は共有ロックを要求し、データX、Y、Zへの
update は各データへの専有ロックを要求する。
┌────┬────┬────┬────┐
│ @ │ A │ B │ C │
┌─┼────┼────┼────┼────┤
│ア│ readW │updateY│updateX│updateZ│
├─┼────┼────┼────┼────┤
│イ│ readW │updateY│updateZ│updateX│
├─┼────┼────┼────┼────┤
│ウ│updateX│ readW │updateY│updateZ│
├─┼────┼────┼────┼────┤
│エ│updateY│updateZ│updateX│ readW │
└─┴────┴────┴────┴────┘
ウ
デッドロックは、例えば、今、処理Aが資源Xを使っていて、次に資源Yを使おうとしている一方で、処理Bは資源Yを使っていて、次に資源Xを使おうとしている時、処理Aも処理Bも互いに相手の資源解除を待ち続けていて、固まってしまったようになる現象のことである。
問題の場合、データを専有ロックした後は、トランザクションが終了するまで開放しないということが前提となる。
ア A: readW → updateX、B: readW → updateY の処理の後、AはデータYを専有ロックしようとしている一方で、BはデータXを専有ロックしようとしている時、デッドロックが発生する。
イ A: readW → updateX、B: readW → updateY → updateZ の処理の後、AはデータYを専有ロックしようとしている一方で、BはデータXを専有ロックしようとしている時、デッドロックが発生する。
ウ 正しい。専有するデータの順番を同じにするとデッドロックを避けることができる。
エ A: readW → updateX、B: updateY → updateZ の処理の後、AはデータYを専有ロックしようとしている一方で、BはデータXを専有ロックしようとしている時、デッドロックが発生する。
問28 | 目次 | 問30 |