在实现死锁检测算法时遇到麻烦



我已经整理好了,除了一个特别的困惑:

如果Allocationi != 0,那么Finish[i]:= false;否则,Finish[i]:= true。
这是否意味着这一行的等于零?

算法:

数据结构:

  • Available:长度为m的向量,表示可用的个数
  • 分配:一个n × m矩阵定义每个资源的数量当前分配给每个进程的类型。
  • 请求:n × m矩阵表示每个请求的当前请求的过程。如果Request[i][j] = k,则进程Pi为请求更多资源类型为Rj的实例。
  • 工作:长度为m的矢量。
  • 完成:长度为n的矢量。

算法:

  1. Initialize Work:= Available。
    • = 1, 2,…,n,如果分配<子> ! = 0,然后Finish[i]:= false;否则,Finish[i]:= true
  2. 找到一个索引i,使两者:
    • (a) Finish[i] = false
    • (b)请求i <= Work
    • 如果不存在,请转步骤4。
  3. Work:= Work + Allocationi
    • 结束[i]:= true
    • 转到步骤2
  4. 如果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"。

最新更新