我们知道,一种算法需要遵守三个规则:互斥,有界等待和进展。首先,请务必注意,我们正在处理两个流程: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();
}
证明它不遵守互斥或有界等待很简单:
有限等待:
(我很抱歉在MS单词表中完成此操作-这是使我(半)可读的最快的方法)。
现在,无论我想到哪种情况,我似乎都无法将两个进程都卡在while循环中(因此证明它不符合进度规则)。我敢肯定,这是我所忽略的非常简单的事情,但是是的。
任何帮助将不胜感激。