No.118 2相ロッキングプロトコルに従ってロックを獲得するトランザクションA,Bを図のように同時実行した場合に,デッドロックが発生しないデータ処理順序はどれか。
ここで,read と update の位置は,アプリケーションプログラムでの命令発行時点を表す。
また,データWへの read は共有ロックを要求し,データX,Y,Zへの update は各データへの専有ロックを要求する。
ここで,read と update の位置は,アプリケーションプログラムでの命令発行時点を表す。
また,データWへの read は共有ロックを要求し,データX,Y,Zへの update は各データへの専有ロックを要求する。
⭕️
❌
💾
🖊 | ☑️ |
⭕️ | [[ AnswerCalc[0] ]] % | A | [[ AnswerCalc[1] ]] |
デッドロックとは、共有資源を使用する2つ以上のトランザクションが、互いに相手トランザクションが必要とする資源を排他的に使用していて、互いのトランザクションが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとトランザクションは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。この問題では、2つのトランザクションのロック要求を追跡することでデッドロックが発生するか否かを判断しますが、その前提として共有ロック・専有ロック及び2相ロッキングプロトコルについて確認しておきましょう。
そして、2相ロッキングプロトコルは、トランザクション処理で読書きが必要になったデータにその都度ロックをかけていき、全てのロックを獲得した後にだけロックの解除を行うルールを課すロック方式です。つまり、ロックの解除が行われるのはトランザクションの終了時になります。各処理が終わる度に当該ロックを解除するわけではないので注意しましょう。
これを踏まえて、トランザクションA(以下、TA)とトランザクションB(以下、TB)の処理を選択肢ごとに見ていきます。
- 共有ロック
- データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる(読込みは可能)。
- 専有ロック
- データを更新するときに使うロックで、この状態の場合は他のトランザクションによる読込みや更新ができなくなる。
そして、2相ロッキングプロトコルは、トランザクション処理で読書きが必要になったデータにその都度ロックをかけていき、全てのロックを獲得した後にだけロックの解除を行うルールを課すロック方式です。つまり、ロックの解除が行われるのはトランザクションの終了時になります。各処理が終わる度に当該ロックを解除するわけではないので注意しましょう。
これを踏まえて、トランザクションA(以下、TA)とトランザクションB(以下、TB)の処理を選択肢ごとに見ていきます。
- TAが W を共有ロックする。
- TBが W を共有ロックする。
- TAが X を専有ロックする。
- TBが Y を専有ロックする。
- TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
- TBが X の専有ロックを要求するが、TAが専有ロック中なので待ち状態となる。
- TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
- TAが W を共有ロックする。
- TBが W を共有ロックする。
- TAが X を専有ロックする。
- TBが Y を専有ロックする。
- TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
- TBが Z を専有ロックする。
- TBが X の専有ロックを要求するが、TAが専有ロック中なので待ち状態となる。
- TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
- TAが W を共有ロックする。
- TBが X を専有ロックする。
- TAが X の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
- TBが W を共有ロックする。
- TBが Y を専有ロックする。
- TBが Z を専有ロックする。
- TBの終了によりロックが解除される。
- TAが X を専有ロックする。
- TAが Y を専有ロックする。
- TAが Z を専有ロックする。
- TAの終了によりロックが解除される。
- TAが W を共有ロックする。
- TBが Y を専有ロックする。
- TAが X を専有ロックする。
- TBが Z を専有ロックする。
- TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
- TBが X の専有ロックを要求するが、TAが専有ロック中なので待ち状態となる。
- TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
💾
✔️
[[ d.CommentTxt ]] |
< | > |
🥇 |