天天看點

同步與互斥

簡介

臨界資源

雖然多個程序可以共享系統中的各種資源,但其中許多資源一次隻能為一個程序所使用,我們把一次僅允許一個程序使用的資源稱為臨界資源。許多實體裝置都屬于臨界資源,如列印機等。此外,還有許多變量、資料等都可以被若幹程序共享,也屬于臨界資源。

對臨界資源的通路,必須互斥地進行,在每個程序中,通路臨界資源的那段代碼稱為臨界區。為了保證臨界資源的正确使用,可以把臨界資源的通路過程分成四個部分:

- 進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設定正在通路臨界區的标志,以阻止其他程序同時進入臨界區。

- 臨界區。程序中通路臨界資源的那段代碼,又稱臨界段。

- 退出區。将正在通路臨界區的标志清除。

- 剩餘區。代碼中的其餘部分。

do {

entry section; //進入區

critical section; //臨界區

exit section; //退出區

remainder section;//剩餘區

} while(true)

同步

同步亦稱直接制約關系,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調它們的工作次序而等待、傳遞資訊所産生的制約關系。程序間的直接制約關系就是源于它們之間的互相合作。

例如,輸入程序A通過單緩沖向程序B提供資料。當該緩沖區空時,程序B不能獲得所需資料而阻塞,一旦程序A将資料送入緩沖區,程序B被喚醒。反之,當緩沖區滿時,程序A被阻塞,僅當程序B取走緩沖資料時,才喚醒程序A。

同步與互斥

互斥

互斥亦稱間接制約關系。當一個程序進入臨界區使用臨界資源時,另一個程序必須等待, 當占用臨界資源的程序退出臨界區後,另一程序才允許去通路此臨界資源。

例如,在僅有一台列印機的系統中,有兩個程序A和程序B,如果程序A需要列印時, 系統已将列印機配置設定給程序B,則程序A必須阻塞。一旦程序B将列印機釋放,系統便将程序A喚醒,并将其由阻塞狀态變為就緒狀态。

為禁止兩個程序同時進入臨界區,同步機制應遵循以下準則:

空閑讓進。臨界區空閑時,可以允許一個請求進入臨界區的程序立即進入臨界區。

忙則等待。當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待。

有限等待。對請求通路的程序,應保證能在有限時間内進入臨界區。

讓權等待。當程序不能進入臨界區時,應立即釋放處理器,防止程序忙等待。

其他

程序(線程)之間的兩種關系:同步與互斥。

所謂互斥,是指散布在不同程序之間的若幹程式片斷,當某個程序運作其中一個程式片段時,其它程序就不能運作它們之中的任一程式片段,隻能等到該程序運作完這個程式片段後才可以運作。

所謂同步,是指散步在不同程序之間的若幹程式片斷,它們的運作必須嚴格按照規定的 某種先後次序來運作,這種先後次序依賴于要完成的特定的任務。  

顯然,同步是一種更為複雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個線程之間不可以同時運作,他們會互相排斥,必須等待一個線程運作完畢,另一個才能運作,而同步也是不能同時運作,但他是必須要安照某種次序來運作相應的線程(也是一種互斥)! 

是以:

互斥:是指某一資源同時隻允許一個通路者對其進行通路,具有唯一性和排它性。但互斥無法限制通路者對資源的通路順序,即通路是無序的。  

同步:是指在互斥的基礎上(大多數情況),通過其它機制實作通路者對資源的有序通路。在大多數情況下,同步已經實作了互斥,特别是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個通路者同時通路資源。

使用者空間

核心空間