银行家算法用于确定是否可以满足所有资源请求而不会导致死锁。
m是资源类型的总数。
n是进程的总数。
NEED是大小为m * n的数组,它定义了每种资源类型的挂起请求。例如:NEEDij = 2表示进程i正在请求2个资源j。
以下是算法:
m是资源类型的总数。
n是进程的总数。
NEED是大小为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的向量进行逐个元素比较吗?