- 1. 背景
- 首先,看個例子,進程P1,P2共用一個變量COUNT,初始值為0


因為P1,P2兩個進程的執行順序是隨機的,可能順序執行也可能是並發的,由圖可見,不同的執行順序,COUNT的值會不同,這是不允許的。
像這種情況,及多個進程並發訪問和操作同一數據且執行結果與訪問發生的特定順序有關,稱為競爭條件。
- 2.臨界區域問題
為了避免上述情況的發生於是就引入了臨界區概念。一個系統有n個進程,每個進程有一個代碼段稱為臨界區。這種系統重要特征是當一個進程在臨界區內執行,沒有其他進程被允許在臨界區內執行。
臨界區問題必須滿足三項原則:互斥,前進,有限等待。解釋如下:

- 3.Peterson算法
了解了臨界區之后,那么如何控制兩個進程訪問一個共享的單位用戶資源而不發生訪問沖突。Peterson算法是一個實現互斥所的並發程序設計算法,它很好地解決了這個問題。
先看看兩個非該算法的程序。算法一是輪轉的思想,類比值日。輪到誰誰上。第二個算法類似於標記算法。進入臨界區進程標記為true。


仔細分析上面兩段代碼可以知道當多進程執行代碼時他們都違反了Progress原則(臨界區三原則)。
Peterson算法代碼如下:很好地滿足了臨界區三原則。
結合標記法與輪轉思想。標記是前提。
pi進程 pj進程(交換i、j位置即可)

偽代碼
