簡介
臨界資源
雖然多個程序可以共享系統中的各種資源,但其中許多資源一次隻能為一個程序所使用,我們把一次僅允許一個程序使用的資源稱為臨界資源。許多實體裝置都屬于臨界資源,如列印機等。此外,還有許多變量、資料等都可以被若幹程序共享,也屬于臨界資源。
對臨界資源的通路,必須互斥地進行,在每個程序中,通路臨界資源的那段代碼稱為臨界區。為了保證臨界資源的正确使用,可以把臨界資源的通路過程分成四個部分:
- 進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設定正在通路臨界區的标志,以阻止其他程序同時進入臨界區。
- 臨界區。程序中通路臨界資源的那段代碼,又稱臨界段。
- 退出區。将正在通路臨界區的标志清除。
- 剩餘區。代碼中的其餘部分。
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喚醒,并将其由阻塞狀态變為就緒狀态。
為禁止兩個程序同時進入臨界區,同步機制應遵循以下準則:
空閑讓進。臨界區空閑時,可以允許一個請求進入臨界區的程序立即進入臨界區。
忙則等待。當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待。
有限等待。對請求通路的程序,應保證能在有限時間内進入臨界區。
讓權等待。當程序不能進入臨界區時,應立即釋放處理器,防止程序忙等待。
其他
程序(線程)之間的兩種關系:同步與互斥。
所謂互斥,是指散布在不同程序之間的若幹程式片斷,當某個程序運作其中一個程式片段時,其它程序就不能運作它們之中的任一程式片段,隻能等到該程序運作完這個程式片段後才可以運作。
所謂同步,是指散步在不同程序之間的若幹程式片斷,它們的運作必須嚴格按照規定的 某種先後次序來運作,這種先後次序依賴于要完成的特定的任務。
顯然,同步是一種更為複雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個線程之間不可以同時運作,他們會互相排斥,必須等待一個線程運作完畢,另一個才能運作,而同步也是不能同時運作,但他是必須要安照某種次序來運作相應的線程(也是一種互斥)!
是以:
互斥:是指某一資源同時隻允許一個通路者對其進行通路,具有唯一性和排它性。但互斥無法限制通路者對資源的通路順序,即通路是無序的。
同步:是指在互斥的基礎上(大多數情況),通過其它機制實作通路者對資源的有序通路。在大多數情況下,同步已經實作了互斥,特别是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個通路者同時通路資源。