ソフトウェア開発技術者平成20年春期 午前問66

問66

三つのトランザクションT1,T2,T3が,①~⑪の順序でデータa,bに対する処理を行った場合,デッドロックとなるのはどの時点か。ここで,DBMSはREADの直前に共有ロック,UPDATEの直前に占有ロックをかけ,ROLLBACK又はCOMMITですべてのロックを解除する。
66.png/image-size:365×239
  • [出題歴]
  • ソフトウェア開発技術者 H17春期 問67

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうためプロセスの続行ができなくなってしまいます。
66a.png/image-size:312×159
共有・占有の2つのロックが出てきますので違いを把握しておきましょう。
共有ロック
データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる。
占有ロック
データを更新するときに使うロックで、この状態の場合は他のトランザクションからは読込みや更新ができなくなる。
資源にかけられるロックに注目して状態の推移を見ていきましょう。
  1. T1が a を共有ロックする。
  2. T2が b を占有ロックする。
  3. T1が b を共有ロックしようとするが、T2によって専有ロック中なので待ち状態になる。
  4. T2がROLLBACKで b の占有ロックを解除する。その後、T1が b を共有ロックする。
  5. T3が b を共有ロックする(b は共有ロックなので別トランザクションからの読込みは可能)。
  6. T3が更新処理に伴う占有ロックを a にかけようとするが、T1が a を共有ロック中なので待ち状態となる。
  7. T1が更新処理に伴う占有ロックを b にかけようとするが、T3が b を共有ロック中なので待ち状態となる。
この時点で、T1はT3読込み中の b を、T3はT1読込み中の a が解放されるのを互いに待つ状態になり、2つのトランザクションの間でデッドロックが発生します。したがって正解は⑦の時点ということになります。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop