Unclearance在互斥例如
问题描述:
我看了一下互斥的几个例子,我能理解他们大多数人的运行,除了下面的例子递给我:Unclearance在互斥例如
boolean[] flag = new boolean[2];
一个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])
条件和赛车中情况仍然可能发生。我误解了什么?
答
的声明和定义
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将进入临界区。
如果进程P0和P1以这样的方式安排,下面的语句是为执行这两个相应的下一个语句之前处理:
flag[0] = true; and flag[1] = true;
在这种情况下,僵局会发生。
感觉免费的任何疑问。 –