2相ロッキングプロトコルに従ってロックを獲得するトランザクションA、Bを図のように同時実行した場合に、デッドロックが発生しないデータ処理順序はどれか。
ここで、readとupdateの位置は、アプリケーションプログラムでの命令発行時点を表す。
また、データWへのreadは共有ロックを要求し、データX、Y、Zへのupdateは各データへの専有ロックを要求する。
|
@ |
A |
B |
C |
ア |
read W |
update Y |
update X |
update Z |
イ |
read W |
update Y |
update Z |
update X |
ウ |
update X |
read W |
update Y |
update Z |
エ |
update Y |
update Z |
update X |
read W |
答え ウ
【解説】
デッドロックは資源を専有ロックした際に複数のトランザクションが互いに専有ロックしている資源を専有ロックしようとすると発生するので、これを避けるためには専有する資源の順番を同じにすることで避けることができるので、トランザクションAと同じ順で専有するのは
|
@ |
A |
B |
C |
ウ |
update X |
read W |
update Y |
update Z |
になる。
【キーワード】
・ロック
・デッドロック
【キーワードの解説】
- ロック(lock)
複数の処理(タスク、トランザクション)が動作している環境で、複数の処理が同じデータ(資源)に同時にデータの書換えを行うと、データに不整合が生じるので、書き換えを行う前に他の処理からのアクセスを制限する処理をロックといいます。(排他処理)
- デッドロック(deadlock)
複数の処理(タスク、トランザクション)で、互いに相手が占有(専有)している資源(データ)を占有(ロック)しようとして、処理が停止することです。
処理がA、B、資源がX、Yのときに処理Aが資源Xを占有(専有)し、処理Bが資源Yを占有(専有)している状態で、処理Aが資源Yの占有(専有)待ちになり、処理Bが資源Xの占有(専有)待ちになると、処理AとBはデッドロック状態になります。
もっと、「デッドロック」について調べてみよう。
戻る
一覧へ
次へ
|