Unclearance在互斥例如

问题描述:

我看了一下互斥的几个例子,我能理解他们大多数人的运行,除了下面的例子递给我:Unclearance在互斥例如

boolean[] flag = new boolean[2]; 

enter image description here

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

据我interpertation整个运行将有看起来像这样:

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])条件和赛车中情况仍然可能发生。我误解了什么?

+0

感觉免费的任何疑问。 –

的声明和定义

boolean[] flag = new boolean[2]; 

看起来像Java和Java中的布尔数组填充有false作为默认值。

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

不认为情况并非如此,为P1要朝进Critical Section,唯一的一点是,继P0的声明P1进入Critical Section之前不能执行。

flag[0] = true; 

而且由于默认情况下flag[0] = false,循环条件while(flag[0])将是错误的,并P1将进入临界区。

如果进程P0P1以这样的方式安排,下面的语句是为执行这两个相应的下一个语句之前处理

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

在这种情况下,僵局会发生。