2017-06-14 139 views
1

我想了解peterson的同步解決方案。作爲參考,我附上了閱讀的來源: enter image description here操作系統:Peterson的解決方案

這是來自維基百科頁面。現在, 假設P1想要進入關鍵部分。它設置了flag 1 = trueturn=0。如果P0已經處於臨界區,則P1將繼續等待while(flag[0] == true && turn ==0)的。 我的疑問是:

  1. 的情況下,會發生什麼:P1執行其while循環,當P0只是試圖進入臨界區,並執行 線flag[0] = true。由於某種原因,它不能執行下一行並終止。在這裏,標誌[0]也是如此,並且 轉也是0. P1不必要地等待 臨界區內沒有進程。
  2. 爲什麼需要檢查turn變量。爲什麼不僅僅是這樣:while(flag[0]== true)只要P0將 離開臨界區,flag [0] = false並且P1將能夠 進入。

我在這個同步問題有點困惑,任何幫助將不勝感激。

回答

1
  1. 爲什麼需要檢查轉向變量。爲什麼不僅如此:在(標誌[0] ==真)只要P0將關鍵部分離開,標誌[0] = FALSE和P1將能夠進入

如果你要只用flag [0]和flag [1]就會導致死鎖。讓我們考慮P0設置標誌[0] =真,然後繼續檢查while循環中的條件。在P0可以將寄存器中的標誌[1]值加載進行比較之前,P1設置標誌[1] =真。所以現在P0加載的值爲true,並且將繼續等待,並且由於標誌[0]也是如此,P0在while循環中停留,所以P1也將等待while循環。這是一個死鎖狀態,因爲兩者都在等待另一個將標誌值更改爲false。

  1. 會發生的情況下什麼:P1執行其while循環並且當P0只是試圖進入臨界區和執行的行標誌[0] =真。由於某種原因,它不能執行下一行並終止。在這種情況下,flag [0]也是true,並且turn也是0.在臨界區內沒有進程時,P1會不必要地等待。

對於這個問題,我不認爲P0終止突然證明Peterson的同步解決方案的實施是錯誤的。這是程序中的缺陷,任何錯誤的代碼都可能導致這種死鎖狀況。

相關問題