【发布时间】:2013-03-07 02:32:21
【问题描述】:
我已经解决了所有问题,除了一个具体的混淆:
如果分配i != 0,则 Finish[i] := false;否则,Finish[i] := true。
这是否意味着该特定行的 sum 为零或什么?
算法:
数据结构:
- 可用:长度为 m 的向量表示可用的数量 每种类型的资源。
- 分配:一个 n x m 矩阵定义了每个资源的数量 当前分配给每个进程的类型。
- 请求:一个 n x m 矩阵表示每个请求的当前请求 过程。如果 Request[i][j] = k,那么进程 Pi 是 请求资源类型 Rj 的 k 个更多实例。
- 工作:长度为 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 会死锁。 两个向量之间的小于或等于关系 (i 和 Requesti。
【问题讨论】: