程之間互相競爭某乙個資源,這種關係就稱為程序的互斥,也就是說對於某個系統資源,如果乙個程序正在使用,其他的程序就必須等待其用完,不能同時使用。
併發程序使用共享資源時,除了競爭之外有協作,要利用互通訊息的辦法來控制執行速度,使相互協作的程序正確工作。程序之間的相互合作來完成某一任務,把這種關係稱為程序的同步.
作業系統中將一次只允許乙個程序訪問的資源稱為臨界資源。乙個含有訪問某一臨界資源的迴圈程序可描述如下:
while(true)
對程序的互斥和同步,作業系統必須採取某種控制手段,以保證程序的安全可靠執行。對互斥,要保證在臨界區內不能交替執行,而誰先進入臨界區都是可以的。對 同步,則要保證合作程序必須相互配合共同推進,並嚴格按照一定的先後順序。用什麼來保證程序的同步和互斥呢,這就是訊號量機制。
1.記錄型訊號量
struct semaphore
s;2.p、v原語操作
p原語操作的主要動作是:
v原語操作的主要動作是:
程序互斥和同步的實現:
1. 用pv原語實現程序的互斥
對於互斥的訊號量s與所有的併發程序有關,所以稱之為公有訊號量。只要把臨界區置於p(s) 和v(s)之間,即可實現程序間的互斥。(這樣,每個想訪問臨界資源的程序,在進入臨界區之前,要先對訊號量s執行p操作,若該資源未被訪問,則本次p操 作成功,該程序便可以進入自己的臨界區,這時若再有其他的程序想進入自己的臨界區,在對訊號量s執行p操作後必然會失敗而阻塞,從而保證了臨界資源被互斥的訪問。當訪問臨界資源的程序退出臨界區後,應該再對mutex執行v操作,釋放該臨界資源。)
注意:判斷程序間是否互斥,關鍵是看程序間是否共享某一公有資源,乙個公有資源與乙個訊號量相對應。在實現互斥時應注意:
(1)p(mutex)和v(mutex)必須成對出現,缺少乙個都不行。缺少p(mutex)將會引起系統混亂,不能保證對臨界資源的互斥訪問;缺少v(mutex)將會使該臨界資源永久不被釋放,從而因等待該資源而阻塞的程序不再被喚醒。
(2)p(s)和v(s)的呼叫一定緊挨著臨界區的前、後。
2. 用pv原語實現程序的同步
與程序互斥不同,程序同步時的訊號量只與制約程序及被制約程序有關而不是與整組併發程序有關,所以稱該訊號量為私有訊號量。利用pv原語實現程序同步的方法是:首先判斷程序間的關係為同步的,且為各併發程序設定私有訊號量,然後為私有訊號量賦初值,最後利用pv原語和私有訊號量規定各程序的執行順序。
同步和互斥這兩種制約關係的區別:
程序的互斥是程序間競爭共享資源的使用權,這種競爭沒有固定的必然關係;而程序同步時,涉及到共享資源的併發程序之間有一種必然的依賴關係。用 pv操作解決程序同步問題時首先應確定問題是屬於程序互斥還是程序同步,或是互斥與同步的混合問題。然後根據共享資源的數量以及使用共享資源的規則正確的 定義訊號量及其初值。然後決定在不同訊號量上應實施的p操作和v操作,用這些p操作和v操作保證併發程序正確地使用共享資源。
程序互斥和同步
一組併發程序中的乙個或多個程式段,因共享某一公有資源而導致它們必須以乙個不允許交叉執行的單位執行。即不允許兩個以上的共享該資源的併發程序同時進入臨界區稱為互斥 而一次僅允許乙個程序使用的資源稱為臨界資源 critical resource 考察鎖位的值 若原來的值是為 0 將鎖位置為 1 占用該資源...
程序的同步和互斥反映了 程序同步和互斥機制
程序同步的幾種機制 多程序的系統中避免不了程序間的相互關係。本講將介紹程序間的兩種主要關係 同步與互斥,然後著重講解解決程序同步的幾種機制。程序互斥是程序之間發生的一種間接性作用,一般是程式不希望的。通常的情況是兩個或兩個以上的程序需要同時訪問某個共享變數。我們一般將發生能夠問共享變數的程式段稱為臨...
程序同步和互斥的關係
程序的同步和互斥是併發程序的兩種重要的關係,程序互斥反映了程序間的競爭的關係,程序同步反映了程序間協作的關係,從以上對程序互斥和同步的分析中,程序互斥其實就是一種特殊的程序的同步,例如,程序的互斥是程序之間對臨界區的一種排他訪問,當有乙個程序在臨界區是,其他的程序不允許進入臨界區。當在臨界區中的 程...