資源獲得順序の統一によるデッドロック防止

デッドロック(Deadlock)は、複数のタスクが互いに相手の保持している資源の解放を待ち合ってしまい、すべてのタスクが処理を進められなくなる現象です。デッドロックの発生条件の一つに「循環待機(Circular Wait)」があります。 例えば資源 $R_1, R_2$ に対し、タスク $T_1$ が $R_1 \to R_2$、タスク $T_2$ が $R_2 \to R_1$ の順で獲得しようとすると循環待機が発生します。これを防止するには、「すべてのタスクにおいて資源を獲得する順序を同一のルール(例えば常に $R_1 \to R_2$ の順序)に統一する」ことが極めて有効です。これにより循環待機が原理的に発生しなくなります。したがってイが正解です。 各選択肢の解説は以下のとおりです。 優先度に差をつけても、低優先度タスクが先に一方の資源を獲得した後に高優先度タスクが他方を獲得すればデッドロック(あるいは優先度逆転)が発生します。 資源獲得の順序を逆にすると、互いに異なる資源を保持したまま相手の資源を待つことになり、まさにデッドロックが発生する原因となります。 優先度を同じにしても、資源の獲得タイミングによってデッドロックは依然として発生します。 獲得順序 タスク1 タスク2 起こり得ること 逆(ウ) R1 → R2 R2 → R1 1がR1、2がR2を持って互いに待つ= デッドロック 同じ(イ) R1 → R2 R1 → R2 R1を取れた方が先にR2も取れる。待つ側は何も持たずに待つだけ 同じ順序にすると「一方が R1 を持ち、もう一方が R2 を持つ」状態が作れないため、循環待ちが起きません。

二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。

出典令和7年度秋期 応用情報技術者試験 午前 問18
ア
一方のタスクの優先度を高くする。
イ
資源獲得の順序を両方のタスクで同じにする。
ウ
資源獲得の順序を両方のタスクで逆にする。
エ
両方のタスクの優先度を同じにする。