通过比较两种算法来满足过程进度的关键部分算法?

时间:2013-11-12 02:19:30

标签: algorithm operating-system deadlock critical-section

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

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(...);

1 个答案:

答案 0 :(得分:1)

第二种算法是正确的。

turn变量仅在两个进程等待彼此标志的时间内相关。

退出临界区时无需重置turn,因为它会在重新测试其值之前重置 - 尝试进入临界区的下一个进程。