Algorithm 通过比较两种算法来满足过程进度的临界截面算法?

Algorithm 通过比较两种算法来满足过程进度的临界截面算法?,algorithm,operating-system,deadlock,critical-section,Algorithm,Operating System,Deadlock,Critical Section,这里有两个临界截面的算法。第一个是不满足渐进式需求,第二个是解决方案。我认为第二个有问题,但我的讲师不承认。在每个进程进入提醒部分后,我们需要以某种方式将turn分配给新值?是这样吗 boolean flag[2]; initially flag [0] = flag [1] = false. flag [i] = true //Pi ready to enter its critical section //Process Pi do { flag[i] = true; whil

这里有两个临界截面的算法。第一个是不满足渐进式需求,第二个是解决方案。我认为第二个有问题,但我的讲师不承认。在每个进程进入提醒部分后,我们需要以某种方式将turn分配给新值?是这样吗

boolean flag[2];
initially flag [0] = flag [1] = false.
flag [i] = true 
//Pi ready to enter its critical section
//Process Pi
do {
   flag[i] = true;
   while (flag[j]) ;
   critical section
   flag [i] = false;
   remainder section
} while ( … );
它满足了相互排斥而非进步,现在通过将其改为这一点,我们满足了进步的需要:

int turn;
boolean flag[2];
initially flag [0] = flag [1] = false, turn = i (or j)
Process Pi
do {
   flag [i] = true;
   turn = j;
   while (flag [j] and turn = j) ;
   critical section
   flag [i] = false;
remainder section
while(...);

第二个算法是正确的

turn
变量仅在两个进程都在等待对方的标志时相关

退出临界段时,无需重置
turn
,因为在再次测试其值之前,它将被重置——由下一个尝试进入临界段的过程重置