応用情報技術者 2016年 春期 午前2 問28
問題文
トランザクションA(処理 A1→処理 A2の順に実行する)とトランザクション B(処理 B1→処理 B2の順に実行する)が、データベースの資源SとTに対し、次のように処理A1→処理B1→処理A2→処理B2の順で専有ロックを要求する場合、デッドロックが発生する資源の組合せはどれか。
なお、ロックは処理開始時にかけ、トランザクション終了時に解除する。


選択肢
ア:
イ:(正解)
ウ:
エ:
トランザクションのデッドロック発生資源組合せ【午前2 解説】
要点まとめ
- 結論:デッドロックはトランザクションAとBが互いに相手が保持する資源を待つ状態、選択肢イの組合せで発生します。
- 根拠:A1がSをロックし、B1がTをロック、次にA2がTを要求し、B2がSを要求するため相互待ちが生じます。
- 差がつくポイント:資源の割り当て順序とロックの保持期間を正確に理解し、相互依存関係を見抜くことが重要です。
正解の理由
選択肢イでは、トランザクションAが処理A1で資源Sをロックし、処理A2で資源Tをロックします。一方、トランザクションBは処理B1で資源Tをロックし、処理B2で資源Sをロックします。
このため、AはTの解放を待ち、BはSの解放を待つ状態となり、互いに相手の資源を待つ「デッドロック」が発生します。
このため、AはTの解放を待ち、BはSの解放を待つ状態となり、互いに相手の資源を待つ「デッドロック」が発生します。
よくある誤解
- 「同じ資源を同時にロックすればデッドロック」と考えがちですが、デッドロックは相互に異なる資源を待つ状態で発生します。
- ロックの解除タイミングを誤解し、すぐに解放されると誤認することがあります。
解法ステップ
- 各トランザクションの処理順とロック対象資源を確認する。
- 処理A1→A2、B1→B2の順に資源をロックすることを理解する。
- 各処理がどの資源をロックするか表から読み取る。
- トランザクションAが先にロックした資源をBが後で要求し、逆も同様かを検証する。
- 相互に相手の資源を待つ状態があればデッドロックと判断する。
選択肢別の誤答解説
- ア:両トランザクションが同じ資源Sを先にロックし、次にTをロックするため、相互待ちは発生せずデッドロックは起きません。
- イ:相互に異なる資源を先にロックし、後で相手の資源を要求するためデッドロックが発生します。
- ウ:トランザクションAがTを先にロックし、BがSを先にロックしますが、A2とB2の資源要求が重複しないためデッドロックは発生しません。
- エ:両トランザクションが同じ資源Tを先にロックし、次にSをロックするため、相互待ちは発生せずデッドロックは起きません。
補足コラム
デッドロックは複数のトランザクションが互いに相手の資源解放を待つ状態で、システムの停止や応答遅延を引き起こします。
デッドロック回避には資源のロック順序を統一する方法や、タイムアウトによるロック解放、デッドロック検出アルゴリズムの導入が有効です。
デッドロック回避には資源のロック順序を統一する方法や、タイムアウトによるロック解放、デッドロック検出アルゴリズムの導入が有効です。
FAQ
Q: なぜロックは処理開始時にかけ、終了時に解除するのですか?
A: 一貫性を保つために処理全体を通じて資源を確保し、途中で他のトランザクションに変更されないようにするためです。
A: 一貫性を保つために処理全体を通じて資源を確保し、途中で他のトランザクションに変更されないようにするためです。
Q: デッドロックが発生した場合、どう対処すればよいですか?
A: 一般的にはトランザクションの一方を強制終了(ロールバック)し、資源を解放してデッドロックを解消します。
A: 一般的にはトランザクションの一方を強制終了(ロールバック)し、資源を解放してデッドロックを解消します。
関連キーワード: デッドロック、トランザクション制御、専有ロック、資源競合、ロック順序

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

