除了一个具体的混淆之外,我已经把它全部整理好了:
如果分配i != 0,则 Finish[i] := false; 否则,Finish[i] := true。
这是否意味着该特定行的总和为零或什么?
算法:
数据结构:
- 可用:长度为 m 的向量表示每种类型的可用资源数量。
- 分配:一个 nxm 矩阵定义了当前分配给每个进程的每种类型的资源数量。
- 请求:一个 nxm 矩阵表示每个进程的当前请求。如果 Request[i][j] = k,那么进程 P i正在请求 k 更多资源类型 R j的实例。
- 功:长度为 m 的向量。
- 完成:长度为 n 的向量。
算法:
- 初始化工作:=可用。
- 对于 i = 1, 2, ..., n, 如果分配i != 0, 那么 Finish[i] := false; 否则,Finish[i] := true。
- 找到一个索引 i 使得两者:
- (a) 完成[i] = 假
- (b) 请求i <= 工作
- 如果不存在这样的 i,则转到步骤 4。
- 工作 := 工作 + 分配i
- 完成[i] := true
- 转到第 2 步
- 如果 Finish[i] = false,对于某些 i, 1 <= i...n,则系统处于死锁状态。此外,如果 Finish[i] = false,则进程 P i是死锁的。两个向量之间的小于或等于关系 (<=) 定义如下:设 X 和 Y 为长度为 n 的向量。我们说 X <= Y 当且仅当 x[i] <= y[i] 对于所有 i = 1, 2, ..., n。分配和请求矩阵的行被视为向量,在算法中称为分配i和请求i。