流程同步-试图了解为什么以下算法不遵循“进度”规则

时间:2019-01-21 20:09:26

标签: process mutex mutual-exclusion

我们知道,一种算法需要遵守三个规则:互斥,有界等待和进展。首先,请务必注意,我们正在处理两个流程:P1和P2。

我们看下面的算法:

//Global variables
flag[] = false So, for instance Flag[i] for P1 and Flag[j] for P2, both initially false
int turn //initially 1 or 2 for P1 or P2 respectively

//the algorithm
while(true){
   flag[i] = true
   while(turn != 1) {
      while(flag[j]);
      turn = 1;
   }
   crit_1();
   flag[i] = false;
   rem_1();
}

证明它不遵守互斥或有界等待很简单:

Mutex: Mutual Exclusion

有限等待:

Bounded waiting

(我很抱歉在MS单词表中完成此操作-这是使我(半)可读的最快的方法)。

现在,无论我想到哪种情况,我似乎都无法将两个进程都卡在while循环中(因此证明它不符合进度规则)。我敢肯定,这是我所忽略的非常简单的事情,但是是的。

任何帮助将不胜感激。

0 个答案:

没有答案