「応用情報技術者試験/平成31年春季午前問18」デッドロックの発生を防ぐ方法

問題

出典:応用情報技術者平成31年春季午前問18

二つのタスクが共用する二つの資源を排他的に使用するとき、
デッドロックが発生するおそれがある。

このデッドロックの発生を防ぐ方法はどれか。

ア:一方のタスクの優先度を高くする。
イ:資源獲得の順序を両方のタスクで同じにする。
ウ:資源獲得の順序を両方のタスクで逆にする。
エ:両方のタスクの優先度を同じにする。

用語解説

デッドロック

デッドロックとは、双方のプロセスが永遠に待ち状態になってしまうこと。
理由としては、
・Aの処理は資源Aと資源Bを使用する
・Bの処理も資源Aと資源Bを使用する
という内容の時、
・Aの処理は資源Aを排他ロックしている
・Bの処理は資源Bを排他ロックしている
という状態に陥ってしまうと
Aは資源Bがロックされてるから次の動作を開始できない
Bは資源Aがロックされてるから次の動作を開始できない
という結果になる。
つまりは、お互いがお互いの行為によってお互いを永遠に待ち続けるというのがデッドロックである。

排他ロック

自分が触れている間は、他のプロセスが触れられないようにするロックのこと。
要は独占するということ。

解説

デッドロックが起きないようにするためには、それぞれが異なる資源を独占するのを回避すれば良い。
両方とも同じ資源を独占しにいく分には問題ないのである。片方は待っていれば、いずれロックは解除されるのだから。

それを達成するには、資源獲得の順序を両方とも同じにすれば良い。

一方のタスクの優先度を高くしても、リソースを優先的に割り当てられるだけなので、もう片方のタスクは動作してしまういデッドロックを可能性はある。

タスクの優先度を同じにして何も変わらないし、資源獲得の順序を両方のタスクで逆にすることこそがデッドロックを生む動作なので避けるべきである。

よって、答えはイである。

解答

正解:イ

アドセンス
改行

テックキャンプ