1. 程式人生 > >程序同步與互斥

程序同步與互斥

1.概念

程序同步概念:亦稱直接制約關係,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調它們的工作次序而產生的制約關係。程序間的直接制約關係就是源於它們之間的相互合作。

程序互斥概念:對臨界資源的訪問,需要互斥地進行。即同一個時間段內只能允許一個程序訪問該資源。

程序互斥的四個區:

進入區:檢查是否可進入臨界區,若可進入,需要“上鎖”。

臨界區:訪問臨界資源的那段程式碼。

退出區:負責解鎖。

剩餘區:其餘程式碼部分。

程序互斥需要遵循的原則有:

空閒讓進:臨界區空閒時,應允許一個程序訪問。

忙則等待:臨界區正在被訪問時,其它試圖訪問的程序需要等待。

有限等待:要在有限時間內進入臨界區,保證不會飢餓。

讓權等待:進不了臨界區的程序,要釋放處理機,防止忙等。

2.程序同步與互斥的軟體實現方法

1)單標誌法:兩個程序在訪問完臨界區後會把使用的許可權轉交給另一個程序,也就是說每個程序進入臨界區的許可權只能被另一個臨界區賦予。

2)雙標誌先檢查法:設定一個布林型陣列flag[],陣列中各個元素用來標記各程序想進入臨界區的意願,比如“flag[0] = true”意味著0號程序P0現在想要進入臨界區。

3)雙標誌後檢查法:雙標誌先檢查法得改版,前一個演算法的問題是先檢查後上鎖,但是這兩個操作又無法一氣呵成,因此導致了兩個程序同時進入臨界區的問題。因此,人們又想到了先“上鎖”,後檢查的方法,來避免上述問題。但有可能導致兩個程序都無法進入臨界區的問題。

4)Peterson演算法:雙標誌後檢查法中,兩個程序都爭著想進入臨界區,但是誰也不讓誰,最後誰都無法進入臨界區。Peterson想到了一種方法,如果雙方都爭著想進入臨界區,那可以讓程序嘗試“孔融讓梨”,主動讓對方先使用臨界區。

2.程序同步與互斥的硬體實現方法