本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成28年度 春期 応用情報技術者試験問題と解説

問28

トランザクションA (処理A1 → 処理A2の順に実行する) とトランザクションB (処理B1 → 処理B2の順に実行する) が、データベースの資源SとTに対し、次のように処理A1 → 処理B1 → 処理A2 → 処理B2 の順で専有ロックを要求する場合、デッドロックが発生する資源の組合せはどれか。
 なお、ロックは処理開始時にかけ、トランザクション終了時に解除する。

           ┌───┐ ┌───┐ ┌───┐
 トランザクションA │処理A1│→│処理A2│→│COMMIT│
           └───┘ └───┘ └───┘
             ┌───┐ ┌───┐ ┌───┐
 トランザクションB   │処理B1│→│処理B2│→│COMMIT│
             └───┘ └───┘ └───┘
         ───────────────────> 時刻

   ┌─┬─┬─┬─┐
   │A1│B1│A2│B2│
 ┌─┼─┼─┼─┼─┤
 │ア│S│S│T│T│
 ├─┼─┼─┼─┼─┤
 │イ│S│T│T│S│
 ├─┼─┼─┼─┼─┤
 │ウ│T│S│T│S│
 ├─┼─┼─┼─┼─┤
 │エ│T│T│S│S│
 └─┴─┴─┴─┴─┘


正解


解説

デッドロックは、例えば、今、処理Aが資源Sを使っていて、次に資源Tを使おうとしている一方で、処理Bは資源Tを使っていて、次に資源Sを使おうとしている時、処理Aも処理Bも互いに相手の資源解除を待ち続けていて、固まってしまったようになる現象のことである。

イの場合、
@トランザクションAの処理A1が資源Sを専有ロックする。
AトランザクションBの処理B1が資源Tを専有ロックする。
BトランザクションAの処理A2が資源Tを使おうとするが、処理B1が専有ロックしているので、資源Sを専有ロックしたまま、待ち状態になる。
CトランザクションBの処理B2が資源Sを使おうとするが、資源Sが専有ロックされているため、待ち状態になる。

こうして、互いのトランザクションが待ち状態になり、デッドロック状態となる。

問27 目次 問29