1

除了一个具体的混淆之外,我已经把它全部整理好了:

如果分配i != 0,则 Finish[i] := false; 否则,Finish[i] := true。

这是否意味着该特定行的总和为零或什么?

算法:

数据结构:

  • 可用:长度为 m 的向量表示每种类型的可用资源数量。
  • 分配:一个 nxm 矩阵定义了当前分配给每个进程的每种类型的资源数量。
  • 请求:一个 nxm 矩阵表示每个进程的当前请求。如果 Request[i][j] = k,那么进程 P i正在请求 k 更多资源类型 R j的实例。
  • 功:长度为 m 的向量。
  • 完成:长度为 n 的向量。

算法:

  1. 初始化工作:=可用。
    • 对于 i = 1, 2, ..., n, 如果分配i != 0, 那么 Finish[i] := false; 否则,Finish[i] := true。
  2. 找到一个索引 i 使得两者:
    • (a) 完成[i] = 假
    • (b) 请求i <= 工作
    • 如果不存在这样的 i,则转到步骤 4。
  3. 工作 := 工作 + 分配i
    • 完成[i] := true
    • 转到第 2 步
  4. 如果 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
4

1 回答 1

1

由于 Allocation i是一个向量,“Allocation i != 0”意味着针对零向量(由全零组成的向量)测试 Allocation i 。

换句话说,“分配i == 0”当且仅当向量中的每个条目都是 0。

于 2013-03-07T02:35:37.453 回答