平成17年春期試験問題 午前問67
問67解説へ
三つのトランザクションT1,T2,T3が,①~⑪の順序でデータa,bに対する処理を行った場合,デッドロックとなるのはどの時点か。ここで,DBMSはREADの直前に共有ロック,UPDATEの直前に占有ロックをかけ,ROLLBACK又はCOMMITですべてのロックを解除する。
- ⑤
- ⑥
- ⑦
- ⑧
正解 ウ問題へ
広告
解説
デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうためプロセスの続行ができなくなってしまいます。共有・占有の2つのロックが出てきますので違いを把握しておきましょう。
- 共有ロック
- データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる。
- 占有ロック
- データを更新するときに使うロックで、この状態の場合は他のトランザクションからは読込みや更新ができなくなる。
- T1が a を共有ロックする。
- T2が b を占有ロックする。
- T2がROLLBACKで b の占有ロックを解除する。
- T1が b を共有ロックする。
- T3が b を共有ロックする(b は共有ロックなので別トランザクションからの読込みは可能)。
- T3が更新処理に伴う占有ロックを a にかけようとするが、T1が a を共有ロック中なので待ち状態となる。
- T1が更新処理に伴う占有ロックを b にかけようとするが、T3が b を共有ロック中なので待ち状態となる。
広告