トランザクション処理(全65問中25問目)
No.25解説へ
トランザクションA(処理A1→処理A2の順に実行する)とトランザクションB(処理B1→処理B2の順に実行する)が,データベースの資源SとTに対し,次のように 処理A1→処理B1→処理A2→処理B2 の順で専有ロックを要求する場合,デッドロックが発生する資源の組合せはどれか。
なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。
なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。
出典:平成28年春期 問28
正解 イ問題へ
広告
解説
デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いに相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。
デッドロックは、複数の資源が別々のプロセスによって排他的に使用され、かつ、その専有順序が異なる場合に発生する可能性があります。選択肢の組合せのうち、2つのトランザクションで使用される資源とその専有順序が、
具体的にデッドロックが発生するプロセスは以下のようになります。
デッドロックは、複数の資源が別々のプロセスによって排他的に使用され、かつ、その専有順序が異なる場合に発生する可能性があります。選択肢の組合せのうち、2つのトランザクションで使用される資源とその専有順序が、
- トランザクションA…資源S→資源T
- トランザクションB…資源T→資源S
具体的にデッドロックが発生するプロセスは以下のようになります。
- 処理A1が資源Sを専有ロックする
- 処理B1が資源Tを専有ロックする
- 処理A1が完了し、続いて処理A2が資源Tの専有ロックを要求する。しかし資源Tは、トランザクションBによってトランザクション終了時まで専有ロックされているため、ロック解除待ち状態になる。
- 処理B1が完了し、続いて処理B2が資源Sの専有ロックを要求する。しかし資源Sは、トランザクションAによってトランザクション終了時まで専有ロックされているため、ロック解除待ち状態になる。
- 互いに相手の資源の解放待ちとなりデッドロック状態となる。
- 2つのトランザクションで資源の専有順序が同じのためデッドロックは発生しません。
- 正しい。2つのトランザクションで同じ資源を使用し、かつ、資源の専有順序が異なるためデッドロックが発生します。
- 2つのトランザクションで専有する資源が競合しないためデッドロックは発生しません。
- 2つのトランザクションで資源の専有順序が同じのためデッドロックは発生しません。
広告