平成29年度 春期 午前 問29
データベース
デッドロックに関する問題
トランザクション A と B が,共通の資源であるテーブル a と b を表に示すように更新するとき,デッドロックとなるのはどの時点か。ここで,表中の ① 〜 ⑧ は処理の実行順序を示す。また,ロックはテーブルの更新直前にテーブル単位で行い,アンロックはトランザクション終了時に行うものとする。
〔表:処理の実行順序〕
| 順序 | トランザクション A | トランザクション B |
|---|---|---|
| ① | トランザクション開始 | |
| ② | トランザクション開始 | |
| ③ | テーブル a 更新 | |
| ④ | テーブル b 更新 | |
| ⑤ | テーブル b 更新 | |
| ⑥ | テーブル a 更新 | |
| ⑦ | トランザクション終了 | |
| ⑧ | トランザクション終了 |
- ア③
- イ④
- ウ⑤
- エ⑥
答えと解説を見る
✓ これが正解エ⑥
解説
待ちの矢印が一周した時点が答えです。
設問は、二つのトランザクションが共通の資源である表を更新していくとき、デッドロックとなるのはどの時点かを選ばせています。前提は設問が二つ与えています。ロックは更新の直前に表の単位で掛けること、そして外れるのはトランザクションが終わるときだけであることです。つまり一度確保した表は、最後まで手放されません。この前提を置いたうえで、判定の基準を先に決めておきます。デッドロックとは、互いに相手が抱えている資源の解放を待ち合い、どちらも先へ進めなくなった状態です。片方が止まっただけでは足りません。もう一方が動けるなら、やがて終了して資源を手放すので、待ちはいずれ解けます。そこで各時点について、誰が何を抱え、誰が何を待っているかを書き出し、待っている向きを矢印で結んでいきます。矢印が一方向だけのうちはただの順番待ちで、矢印が一周して輪になった瞬間が答えです。この表では二つの処理が互いに逆の順序で二つの表を取りに行くため、六番目の更新で輪が閉じます。
ほかの選択肢はなぜ違うのか
- ア③:③は、先に始まったほうがテーブル a を確保しただけの時点です。相手はまだ何も掛けていないので待ちが一本も生じておらず、輪になりようがありません。
- イ④:④は、もう一方がテーブル b を確保した時点です。二つの処理が別々の表を持ったにすぎず、どちらも相手の持ち物を待ってはいないので、まだ何も起きていません。
- ウ⑤:⑤は最も紛らわしい時点です。テーブル b を求めた側は確かに止まりますが、相手はまだ次の行へ進めます。片方が待たされただけでは輪は閉じません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
- 排他制御同じデータを同時に更新しても、矛盾が起きないようにする仕組みです。先の処理が終わるまで、後の処理を待たせて防ぎます。
出典:平成29年度 春期 応用情報技術者試験 午前 問29
同じ用語が出る問題
- 令和7年度 秋期 午前 問29:多版同時実行制御に関する問題(トランザクション)
- 令和7年度 秋期 午前 問16:排他制御に関する問題(排他制御)
- 令和6年度 秋期 午前 問31:チェックポイントに関する記述(トランザクション)
- 平成30年度 秋期 午前 問30:排他制御に関する問題(排他制御)
- 平成30年度 春期 午前 問18:セマフォを用いる目的(排他制御)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)