デッドロックの発生時点
出典: 平成29年度 春期 応用情報技術者試験 午前 問29 (IPA)
トランザクション A と B が,共通の資源であるテーブル a と b を表に示すように更新するとき,デッドロックとなるのはどの時点か。ここで,表中の①~⑧は処理の実行順序を示す。また,ロックはテーブルの更新直前にテーブル単位で行い,アンロックはトランザクション終了時に行うものとする。
時間は上から下へ進む。
| トランザクション A | トランザクション B |
|---|---|
| ① トランザクション開始 | |
| ② トランザクション開始 | |
| ③ テーブル a 更新 | |
| ④ テーブル b 更新 | |
| ⑤ テーブル b 更新 | |
| ⑥ テーブル a 更新 | |
| ⑦ トランザクション終了 | |
| ⑧ トランザクション終了 |
- ア ③
- イ ④
- ウ ⑤
- エ ⑥
正解と解説を見る
正解: エ
- ア: ③ は A が a を取得するだけで、他に待つ処理がありません。
- イ: ④ は B が b を取得するだけです。A は b をまだ要求していません。
- ウ: ⑤ では A が B を待ちますが、B は a を要求していないので、まだ待ちの循環はありません。
- エ: ⑥ で B が A の持つ a を待ち、⑤ で A が B の持つ b を待っているので、ここでデッドロックになります。正しい答えです。
ポイント
ロックは更新の直前に取り、トランザクション終了まで解放しません。
- ③ A がテーブル a をロックします。
- ④ B がテーブル b をロックします。
- ⑤ A がテーブル b を更新したいが、B が持っているので 待ち になります。
- ⑥ B がテーブル a を更新したいが、A が持っているので待ちになります。
⑥ の時点で 互いに相手のロック解除を待つ循環 ができ、デッドロックになります。