- 1. 背景
- 首先,看個例子,進程P1,P2共用一個變量COUNT,初始值爲0
由於P1,P2兩個進程的執行順序是隨機的,可能順序執行也多是併發的,由圖可見,不一樣的執行順序,COUNT的值會不一樣,這是不容許的。
像這種狀況,及多個進程併發訪問和操做同一數據且執行結果與訪問發生的特定順序有關,稱爲競爭條件。
爲了不上述狀況的發生因而就引入了臨界區概念。一個系統有n個進程,每一個進程有一個代碼段稱爲臨界區。這種系統重要特徵是當一個進程在臨界區內執行,沒有其餘進程被容許在臨界區內執行。
臨界區問題必須知足三項原則:互斥,前進,有限等待。解釋以下:
瞭解了臨界區以後,那麼如何控制兩個進程訪問一個共享的單位用戶資源而不發生訪問衝突。Peterson算法是一個實現互斥所的併發程序設計算法,它很好地解決了這個問題。
先看看兩個非該算法的程序。算法一是輪轉的思想,類比值日。輪到誰誰上。第二個算法相似於標記算法。進入臨界區進程標記爲true。
仔細分析上面兩段代碼能夠知道當多進程執行代碼時他們都違反了Progress原則(臨界區三原則)。
Peterson算法代碼以下:很好地知足了臨界區三原則。
結合標記法與輪轉思想。標記是前提。
pi進程 pj進程(交換i、j位置便可)
僞代碼