互斥例子中的不公正

时间:2017-04-09 16:38:06

标签: process flags critical-section mutual-exclusion

我已经阅读了几个关于互斥的例子,除了以下传给我的例子外,我能理解其中大多数的例子:

boolean[] flag = new boolean[2]; 

enter image description here

一个while条件取决于另一个进程的flag [n]状态。 因此,为了让P1标注到它的关键部分,flag[0]flag[1]都需要设置为true

根据我的干预,整个运行必须看起来像这样:

P1 - > flag[1] = true
while(flag[0])            // flag[0] is still state-undeclared
P2  -> flag[0]  = true    // so P0 must set it true(?)
critic1(); 
while(flag[1]) 
critic2(); 

虽然这可能不正确,因为flag[0]flag[1]设置为true,两个进程都会传递while(flag[n])条件,并且仍然可能出现竞争条件。我误解了什么?

1 个答案:

答案 0 :(得分:1)

声明和定义

boolean[] flag = new boolean[2]; 

看起来像java,在java中,boolean数组填充false作为默认值。

  

因此,例如让P1进入它的关键部分   标志[0]和标志[1]都需要设置为真。

不是不是 P1 指向Critical Section,唯一的是 P0 strong>在 P1 进入Critical Section之前不得执行。

flag[0] = true;

,默认情况下flag[0] = false,循环条件while(flag[0])将为false, P1 将进入临界区。

如果计划进程 P0 P1 ,则在相应的下一个语句之前为两个进程执行以下语句:

flag[0] = true; and flag[1] = true;

在这种情况下会发生死锁。