程序同步與互斥
首先,我們看乙個例子:程序p1、p2公用乙個變數count,初始值為0
p1、p2兩個程序的執行順序是隨機的,p1、p2可能順序執行或交錯執行。
由圖可見,不同的執行順序,count值會不同,這是不允許的。
在多道程式系統中,由於資源共享或程序合作,使程序間形成間接相互制約和直接相互制約關係,這需要用程序互斥與同步機制來協調兩種制約關係。
1、臨界資源:
然在多道程式系統中的諸程序可以共享各類資源,然而臨界資源卻是一次只能供乙個程序使用,使用完後歸還系統,才能給其他程序使用。(如上例變數count是臨界資源)。
程序對臨界資源必須互斥使用,為實現對臨界資源的互斥訪問,應保證諸程序互斥地進入自己的臨界區。為此,每個程序在進入其臨界區前,必須先申請,經允許後方能進入。
同步機制應遵循的準則:
空閒讓進
當無程序處於臨界區內時,必須讓乙個要求進入臨界區的程序立即進入,以有效地利用臨界資源。
忙則等待
當已有程序處於臨界區內時,其它試圖進入臨界區的程序必須等待,以保證它們互斥地進入臨界區。
有限等待
對要求進入臨界區的程序,應在有限時間內使之進入,以免陷入「死等」。
讓權等待
對於等待進入臨界區的程序而言,它必須立即釋放處理機,以免程序「忙等」
解決互斥的鎖機制:
實現互斥的一種軟體方法是採用鎖機制,即提供一對上鎖(lock)和開鎖(unlock)原語,以及乙個鎖變數w。
程序進入臨界區前,通過鎖變數來判斷臨界資源是否被占用。
2、訊號量機制
號量機制是一種卓有成效的程序同步工具,被廣泛應用於單處理機和多處理機系統,以及計算機網路中。
鎖機制僅能表示「開」與「關」兩種狀態;開、關原語必須作為原子操作來進行;關鎖原語中反覆測試w狀態,浪費了處理機的時間;鎖機制只能解決互斥,不能用於同步。訊號量同步機制能完滿地解決上述問題,以下介紹經典訊號量機制。
p操作:意味著請求分配乙個單位資源 v操作:意味著釋放乙個單位資源
合作程序的執行次序,其程序流圖如下:
進 程 流 圖
互斥例子:
三個程序共用兩個i/o緩衝區
解:設用訊號量s表示共享資源,s初始值為2
同步例子:
有a、b兩程序,a程序從卡片機讀資訊入緩衝區,b程序負責加工讀進緩衝區的卡片
解:設 訊號量s1:緩衝區中有否可供加工的資訊,初始值為0;
訊號量s2:緩衝區是否為空,初始值為1;
在輸入程序a中,可以把p(s2)調到v(s1)後面,而把訊號量s2的初始值設為0。
用p-v操作描述前趨關係的例子:
訊號量還可以描述程式或語句之間的前趨關係。
描述如下:
end4、生產者、消費者問題
產者-消費者(producer-consumer)問題是著名的程序同步問題。它描述一組生產者向一組消費者提供訊息,它們共享乙個有界緩衝池,生產者向其中投放訊息,消費者從中取得訊息。以下用訊號量解決生產者-消費者問題。
假如緩衝池中有n個緩衝區,每個緩衝區存放乙個訊息,可利用互斥訊號量mutex使諸程序對緩衝池實現互斥訪問;利用empty和full計數訊號量分別表示空緩衝及滿緩衝的數量。又假定這些生產者和消費者互相等效,只要緩衝池未滿,生產者可將訊息送入緩衝池;只要緩衝池未空,消費者可從緩衝池取走乙個訊息。
其中,mutex,empty,full的初始值分別為1,n,0;
基本概念
程序互斥:指在多道程式環境下,每次只允許乙個程序對臨界資源進行訪問。
臨界資源:在一段時間內只允許乙個程序訪問的資源。
臨界區:每個程序中訪問臨界資源的那段**。
參考[1]
程序同步與互斥
程序同步與互斥 首先,我們看乙個例子 程序p1 p2公用乙個變數count,初始值為0 p1 p2兩個程序的執行順序是隨機的,p1 p2可能順序執行或交錯執行。由圖可見,不同的執行順序,count值會不同,這是不允許的。在多道程式系統中,由於資源共享或程序合作,使程序間形成間接相互制約和直接相互制約...
程序同步與互斥
為什麼要引入程序同步的概念?多道程式環境下的程序併發執行,它們相互之間存在著不同的制約關係,為了理解和協調這種制約的關係,引入了程序同步的概念。臨界資源是一次只能為乙個程序使用的資源。由於臨界資源的特性,就決定了 對它的訪問必須是互斥的。在每個程序中,訪問臨界資源的那段 稱為臨界區。為了保證臨界資源...
程序 同步與互斥基礎
臨界區 具體一點,在程式中,臨界區就是一段 區域,這段 區在任何時間點至多只有乙個程序在執行它的 打個比方 有個大公尺庫所,裡面裝了若干袋的大公尺,前台有個記錄冊記錄了當前庫所的庫存。當乙個員工運來大公尺時,他首先參看記錄冊中記錄了多少袋大公尺,然後將自己送來的大公尺放入倉庫,最後將自己新加入的大公...