トランザクションA~Gの待ちグラフにおいて,永久待ちの状態になっているトランザクション全てを列挙したものはどれか。
ここで,待ちグラフのX→Yは,トランザクションXはトランザクションYがロックしている資源のアンロックを待っていることを表す。
〔トランザクションA~Gの待ちグラフ〕
正答3
解説
正解は3です。
待ちグラフでは、矢印の始点のトランザクションが、終点のトランザクションによる資源の解放を待っています。
矢印をたどって元に戻る閉路があると、互いに相手の解放を待ち続けるデッドロックになります。
また、デッドロックしているトランザクションを待っているトランザクションも、解放されないので永久に待つことになります。
【図の読み取り】
図の矢印は、CからA、CからB、BからD、DからC、DからE、FからD、FからE、EからGに向かっています。
BはDを、DはCを、CはBを待っており、一巡する閉路になっています。
そのため、B、C、Dはデッドロックしています。
FはDを待っており、Dは解放されないので、Fも永久に待ちます。
Aは誰も待っていません。
EはGを待っていますが、Gは誰も待っていないので、Gが終わればEも進めます。
【選択肢別解説】
1:× Aは何も待っていないので永久待ちではありません。
また、永久待ちになるFが含まれていません。
2:× B、C、Dはデッドロックしていますが、Dを待っているFも永久待ちになるため、Fが不足しています。
3:○ 閉路を作るB、C、Dと、Dを待つFが永久待ちの状態です。
全てを列挙しているのはこの選択肢です。
4:× EとGは閉路に含まれず、Gから矢印が出ていないので、いずれ処理が進みます。
また、Bが含まれていません。
【ポイント】
永久待ちは「閉路上のトランザクション」と「閉路上のトランザクションを直接・間接に待つトランザクション」です。
閉路から出ていく先(ここではAやE、G)は永久待ちにならない点に注意しましょう。