銀行家のアルゴリズムを使用して、リソースに対するすべての要求がデッドロックを引き起こすことなく満たされるかどうかを判断します。
m はリソース タイプの総数です。
n はプロセスの総数です
NEED はサイズ m * n の配列で、リソース タイプごとに保留中のリクエストを定義します。例: NEEDij = 2 は、プロセス i がリソース j の 2 つのアイテムを要求していることを意味します。
アルゴリズムを以下に示します。
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 のベクトルで要素ごとの比較を行う必要があるためですか?