彼得森的算法有一些修改

时间:2015-07-01 21:33:13

标签: algorithm

翻转转弯并标记订单后,{p>会Peterson's Algorithm工作; 例如:

hidden

=================

@media

1 个答案:

答案 0 :(得分:1)

不,如果您翻转订单,它就不起作用,因为它允许两个进程同时进入关键部分。

例如,假设一个初始状态为flag[0] = false, flag[1] = false, turn = 0

流程0运行:

turn = 1;  // flag[0] = false, flag[1] = false, turn = 1

然后上下文切换到进程1:

turn = 0;
flag[1] = true;   // flag[0] = false, flag[1] = true, turn = 0

while (flag[0] && turn == 0) {} // this evaluates to false because
    // process 0 was interrupted before it set flag[0] to true

// Process 1 enters the critical section...

然后上下文切换回进程0:

flag[0] = true;   // flag[0] = true, flag[1] = true, turn = 0
while (flag[1] && turn == 1) {} // this evaluates to false

// Process 0 enters the critical section..

现在两个流程都在关键部分内。

设置标志必须首先,因为它是其他进程无法覆盖的事情。如果进程设置turn,那么如上所示,其他进程可以覆盖它,然后在第一个进程有机会设置标志之前进入临界区。