デッドロックに至らずにリソースのすべての要求を満たすことができるかどうかを判断するためにバンカーのアルゴリズムが使用されます。バンカーのアルゴリズム計算時間の複雑度
mは、各リソースタイプの保留中の要求を定義し、
nは
必要がサイズm×n個のアレイであるプロセスの合計数であるリソースタイプの総数です。例:NEEDij = 2は、プロセスiが2つのリソースjを要求していることを示します。
アルゴリズムは以下の通りである:
BOOLEAN function SAFESTATE is -- Determines if current state is safe
{ NOCHANGE : boolean;
WORK : array[1..m] of INTEGER = AVAILABLE;
FINISH : array[1..n] of boolean = [false, ..,false];
I : integer;
repeat
NOCHANGE = TRUE;
for I = 1 to N do
if ((not FINISH[i]) and
NEEDi <= WORK) then {
WORK = WORK + ALLOCATION_i;
FINISH[i] = true;
NOCHANGE = false;
}
until NOCHANGE;
return (FINISH == (true, .., true));
}
私の質問で、どのように時間の複雑さ0(n個の* n個の* mの)?より具体的には、m項はどのように多項式に入るか?それは、長さmのベクトルに対して要素ごとの比較を行う必要があるからですか?
ちょうど削除された回答のあなたのコメントと一緒に、このコードで何が何を意味するのかが本当に不明です。 NEEDi、ALLOCATION_iとは何ですか?WORKは要素ごとにまたは要素ごとにどのように割り当てられていますか?このコードはどこから来たのですか? – sharptooth