令和7年度 秋期 午前 問18
ソフトウェア
このデッドロックの発生を防ぐ方法
二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
- ア一方のタスクの優先度を高くする。
- イ資源獲得の順序を両方のタスクで同じにする。
- ウ資源獲得の順序を両方のタスクで逆にする。
- エ両方のタスクの優先度を同じにする。
答えと解説を見る
✓ これが正解イ資源獲得の順序を両方のタスクで同じにする。
解説
資源を取る順番を両方でそろえるのが定石です。
この設問は、二つのタスクが共用する二つの資源を排他的に使用するときに起こりうるデッドロックを、どのようにすれば発生させずに済むかを尋ねています。ですから見分けの軸は、資源の取り方を変えて循環待ちの輪を作らないようにする方策になっているかという一点だけです。資源を X と Y と呼ぶと、片方が X を握って Y を待ち、もう片方が Y を握って X を待つ形になると、互いに相手が握っているものを待って進めなくなります。これがデッドロックの姿です。そこで両方のタスクが X を取ってから Y を取るというように順番をそろえておくと、先に X を取れたほうが Y も取って処理を終え、返した後にもう一方が進めるようになります。輪ができないので待ちの循環が生じません。したがって発生を防ぐ方法は、資源獲得の順序を両方のタスクで同じにする、というものです。
ほかの選択肢はなぜ違うのか
- ア一方のタスクの優先度を高くする。:一方のタスクの優先度を高くするという方法は、どちらを先に走らせるかを変えるだけで、資源の取り方の順序には触れていません。高い側が握ったまま待てば、循環待ちの形は変わらず、デッドロックは起こり得ます。
- ウ資源獲得の順序を両方のタスクで逆にする。:資源獲得の順序を両方のタスクで逆にするという方法は、まさに片方が X から、もう片方が Y から取りに行く形なので、循環待ちを作ってしまいます。防ぐどころか、デッドロックが起きるお手本の設定になっています。
- エ両方のタスクの優先度を同じにする。:両方のタスクの優先度を同じにするという方法は、どちらを先に走らせるかの決め方の話であって、資源をどの順番で取るかとは別の軸に立ちます。輪の作られ方は変わらず、デッドロックの発生を防ぐ手立てにはなりません。
出典:令和7年度 秋期 応用情報技術者試験 午前 問18
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)