2016-05-25 100 views
1

我有一点难以理解Peterson算法: 算法说:理解困难Peterson算法

flag[i] = true; 
turn = j; 
while (flag[j] && turn == j); 
// critical section 
... 
// end of critical section 
flag[i] = false; 

现在让我们假设最初 标志[0] =标志[1] =真

如果P1开始执行,它将会忙于在while循环中等待,因为flag [0]和turn == 0都是true。现在如果P0不想执行,P1永远不会执行临界区。

请清除我的疑惑;我的理解可能有空白。

由于

回答

1

现在让我们假设最初标志[0] =标志[1] =真

现在,如果P0不希望执行,P1将永远不会执行关键区段。

两个标志都应该初始化为false。如果两个进程都想执行或正在执行临界区,则两者都可以设置为true的唯一方法是。因此,如果P1正在等待执行,flag[0]true,所以P0必须要执行关键部分,或者在执行临界区期间,之后flag[0]将被设置为false,并且P1可以进入关键部分。另外,如果P1正在等待执行,P0也不能等待执行,因为等待条件是互斥的(因为turn为0或1,并且不能同时)。

将这两个标志初始化为true都会导致死锁,如您所描述的。这样做是没有意义的,因为标志的含义是表示进程想要进入临界区,所以如果情况并非如此,为什么要设置该值?

+0

谢谢。所以它必须被初始化为假。 – anupamD

+0

是的,正确的。初始化为true可能会导致死锁。 – samgak