我已经整理好了,除了一个特别的困惑:
如果Allocationi != 0,那么Finish[i]:= false;否则,Finish[i]:= true。这是否意味着这一行的和等于零?
算法:
数据结构:- Available:长度为m的向量,表示可用的个数
- 分配:一个n × m矩阵定义每个资源的数量当前分配给每个进程的类型。
- 请求:n × m矩阵表示每个请求的当前请求的过程。如果Request[i][j] = k,则进程Pi为请求更多资源类型为Rj的实例。
- 工作:长度为m的矢量。
- 完成:长度为n的矢量。
算法:
- Initialize Work:= Available。
- = 1, 2,…,n,如果分配<子>子> ! = 0,然后Finish[i]:= false;否则,Finish[i]:= true
- 找到一个索引i,使两者:
- (a) Finish[i] = false
- (b)请求i <= Work
- 如果不存在,请转步骤4。
- Work:= Work + Allocationi
- 结束[i]:= true
- 转到步骤2
- 如果Finish[i] = false,对于某些i, 1 <= i…N,则系统处于死锁状态状态。此外,如果Finish[i] = false,则进程Pi处于死锁状态。两个向量之间的小于等于关系(<=)定义如下:设X和Y是长度为n的向量。我们说X <= Y当且仅当X [i] <= Y [i]对于所有i = 1,2,…, n.将分配矩阵和请求矩阵的行视为向量,在算法中称为Allocationi和Requesti。
由于Allocationi是一个向量,因此"Allocationi != 0"意味着测试Allocationi与零向量(由所有零组成的向量)的关系。
换句话说,如果vector中的每个元素都为0,则"Allocationi == 0"。