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

三つのトランザクションT1、T2、T3が、@〜Jの順序でデータa、bに対する処理を行った場合、デッドロックとなるのはどの時点か。
ここで、DBMSはREADの直前に共有ロック、UPDATEの直前に占有ロックをかけ、ROLLBACK又はCOMMITですべてのロックを解除する。

T1
@ READ a

B READ b



F UPDATE b

H UPDATE a
I COMMIT


T2

A UPDATE b

C ROLLBACK








T3




D READ b
E UPDATE a

G UPDATE b


J COMMIT

 ア  E  イ  F  ウ  G  エ  H


答え イ


解説
@〜Jの処理を行ったときのデータa、bの状態を見ていく。

処理の内容 データaの状態 データbの状態
@ T1が「READ a」でデータaを共有ロック T1が共有ロック
A T2が「UPDATE b」でデータbを占有ロック T1が共有ロック T2が占有ロック
B T1が「READ b」でデータbを共有ロックを行いたいが、データbはT2が占有ロックしているので、T1は資源解放待ち T1が共有ロック T2が占有ロック
C T2が「ROLLBACK」でデータbの占有ロックを解除、T1がデータbの解放待ちなので共有ロック T1が共有ロック T1が共有ロック
D T3が「READ b」でデータbを共有ロック
(データbはT1が共有ロック状態なので共有ロックは可)
T1が共有ロック T1、T3が共有ロック
E T3が「UPDATE a」でデータaの占有ロックを行いたいが、データaはT1が共有ロックしているので、T3はデータaの資源解放待ち T1が共有ロック T1、T3が共有ロック
F T1が「UPDATE b」でデータbの占有ロックを行いたいが、データbはT3も共有ロックしているので、T1はデータbの資源解放待ち T1が共有ロック T1、T3が共有ロック
Fの処理でT1とT3が資源解放待ち状態になってしまいデッドロックになる。(イ)


キーワード
・デッドロック

キーワードの解説
  • デッドロック(deadlock)
    データベース(DBMS)ではデータにアクセスするときにロック(共有、占有)を行うが、複数のプロセスが互いに相手のロックしている資源をロックしようとしてロックできないため、解放待ちの状態になり処理が停止してしまうことです。
    デッドロックを防ぐ方法としては、複数の資源をロックする場合、すべてのタスクで資源のロックをする順番を同じにすることです。

もっと、「デッドロック」について調べてみよう。

戻る 一覧へ 次へ