2つの資源A、Bがあり、ともに排他的にアクセスする必要がある。そのため、それぞれの資源に対応した排他ロックa、b を用いるものとする。2つのプロセスX、Yが、それぞれ次の順序で実行している場合、@〜Dの実行順序のうち、デッドロックが起きるものはどれか。なお、選択肢の矢印は、時間的な処理の推移を意味する。
プロセスX プロセスY
↓X1:ロックaを確保 ↓Y1:ロックbを確保
↓X2:ロックbを確保 ↓Y2:ロックaを確保
↓X3:資源A、Bにアクセス ↓Y3:資源 A、Bにアクセス
↓X4:ロックbを解放 ↓Y4:ロックaを解放
↓X5:ロックaを解放 ↓Y5:ロックbを解放
@ X1→Y1→Y2→X2
A X1→X2→Y1→Y2
B X1→X2→Y1→X3→Y2
C X1→X2→X3→Y1→Y2
D X1→X2→X3→X4→Y1
@
@ 正しい。
X1:Aを確保
Y1:Bを確保
Y2:Aを確保しようとして解除待ち。
X2:Bを確保しようとして解除待ち。
⇒Y2とX2でデッドロックが発生する。
A
X1:Aを確保
X2:Bを確保
Y1:Bを確保しようとして解除待ち
⇒Y2はY1が終了するまで実行されない。
B
X1:Aを確保
X2:Bを確保
Y1:Bを確保しようとして解除待ち
X3:資源A、Bにアクセス
⇒Y2はY1が終了するまで実行されない。
C
X1:Aを確保
X2:Bを確保
X3:資源A、Bにアクセス
Y1:Bを確保しようとして解除待ち
⇒Y2はY1が終了するまで実行されない。
D
X1:Aを確保
X2:Bを確保
X3:資源A、Bにアクセス
X4:資源Bを解放
Y1:Bを確保
⇒ここまでスムーズに処理される。
W−10 | 目次 | W−12 |