2016-05-25 134 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