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

- ア A1: S, B1: S, A2: T, B2: T
- イ A1: S, B1: T, A2: T, B2: S
- ウ A1: T, B1: S, A2: T, B2: S
- エ A1: T, B1: T, A2: S, B2: S
正解と解説を見る
正解: イ
- ア: B1 は S を要求しますが A が持っているので B は待ちます。A は T を取得して終了できるので、デッドロックにはなりません。
- イ: A は S を持って T を、B は T を持って S を待ち合うのでデッドロックになります。正しい答えです。
- ウ: A1 が T を取り、A2 も T なので A はそのまま進めます。B は S を取得した後 S を再度使うだけで、互いに待ち合いません。
- エ: B1 は T を要求しますが A が持っているので B は待ちます。A は S を取得して終了できるので、デッドロックにはなりません。
ポイント
デッドロック は、2 つのトランザクションが 互いに相手の持つ資源を待つ ときに起こります。
イの場合を順に追います。
- A1 が S をロック、B1 が T をロック
- A2 が T を要求 → B が持っているので A は待つ
- B2 が S を要求 → A が持っているので B も待つ
互いに待ち続けるのでデッドロックです。