訊號量機制

2021-10-12 17:23:07 字數 3266 閱讀 8198

有多少資源就把訊號量初值設為多少。申請資源時進行p操作,釋放資源時進行v操作。

實現程序互斥

步驟:1.分析併發程序的關鍵活動,劃定臨界區

2.設定互斥訊號量mutex,初值為1(一般為臨界資源數目)

3.在臨界區之前執行p(mutex)

4.在臨界區之後執行v(mutex)

/*訊號量機制實現互斥*/p1(

)p2()

注:對不同的臨界資源需要設定不同的互斥訊號量。

p、v操作必須成對出現。

實現程序同步

1.分析什麼地方需要實現「同步關係」,即要保證「一前一後」執行兩個操作

2.設定同步訊號量s,初始值為0

3. 在「前操作」之後執行v(s)

4. 在「後操作」之前執行p(s)

解題步驟:1.確定程序的個數及每個程序的工作

2.確定關鍵工作步(需要控制的)

3.確定訊號量表示的含義:當訊號量的值為0時,表示期望的訊息尚未產生;當訊號量的值非0時,表示期望的訊息已經存在

4.寫出偽**。在同步關係的控制中同一訊號量的p(wait)、v(signal)操作成對出現,但它們分別在不同的程序中。

/*保證,**4一定是在**2之後執行*/

semaphore s=0;

//初始化同步訊號量,初始值為0p1(

)

p2()

若先執行到v(s)操作,則s++後s=1.之後當執行到p(s)操作時,由於s=1,表示有可用資源,會執行s–,s的值變回0,p2程序不會執行block原語,而是繼續往下執行**4.

若先執行到p(s)操作,由於s=0,s–後s=-1,表示此時沒有可用資源,因此p操作中會執行block原語,主動請求阻塞。之後當執行完**2,繼而執行v(s)操作,s++,使s變回0,由於此時有程序在該訊號量對應的阻塞佇列中,因此會在v操作中執行wakeup原語,喚醒p2程序。這樣p2就可以繼續執行**4了。

例:假設有三個併發程序p、q、r,其中p負責從輸入裝置讀取資訊並傳送給q,q將資訊加工後傳送給r,r則負責將資訊列印輸出。程序p、q共享乙個緩衝區,程序q、r共享另乙個緩衝區。

3個程序p、q、r

p程序:

從輸入裝置上讀入資訊

將資訊放入緩衝區1

q程序:

從緩衝區1中取出資訊

將資訊放入緩衝區2中

r程序:

從緩衝區2取出資訊

將資訊列印輸出

確定同步、互斥關係

-同步:p當緩衝區1中無資料時,才可以向緩衝區1寫入資訊

-同步:q當緩衝區1中有資料時,才可以向緩衝區1讀取資訊

-同步:q當緩衝區2中無資料時,才可以向緩衝區2寫入資料

-同步:r當緩衝區2中有資料時,才可以向緩衝區2讀取資料

設定訊號量:

-快取區1中無資料,empty1,初值1

-快取區1中有資料,full1,初值0

-快取區2中無資料,empty2,初值1

-快取區2中有資料,full2,初值0

process p()

}系統中有一組生產者程序和一組消費者程序,生產者程序每次生產乙個產品放入緩衝區,消費者程序每次從緩衝區中取出乙個產品並使用。(注:這裡的「產品」可理解為某種資料)

生產者、消費者共享乙個初始為空、大小為n的緩衝區。

只有緩衝區沒滿時,生產者才能把產品放入緩衝區,否則必須等待。(同步關係)

只有緩衝區不空時,消費者才能從中取出產品,否則必須等待。(同步關係)

緩衝區時臨界資源,各程序必須互斥訪問。(互斥關係)

剛開始空閒緩衝區的數量為n,非空緩衝區的數量為0

生產者每次要消耗§乙個空閒緩衝區,並生產(v)乙個產品。

消費者每次要消耗§乙個產品,並釋放乙個空閒緩衝區(v)。

向緩衝區放入/取走產品需要互斥。

semaphore mutex =1;

//互斥訊號量,實現對緩衝區的互斥訪問

semaphore empty= n;

//同步訊號量,表示空閒緩衝區的數量

semaphore full=0;

//同步訊號量,表示產品的數量,也即非空緩衝區的數量

producer()

}

consumer()

}

例:

有乙個閱覽室,共有100個座位。讀者進入閱覽室時必須在入口處進行登記;離開閱覽室時必須進行登出。使用pv操作描述讀者進入/離開閱覽室的同步與互斥關係。

reader程序
分析:在入口、出口處讀者應該互斥進行登記和登出;100個座位,100個互斥資源

設定訊號量:

-閱覽室內的座位數量,seat,初值100

-入口處進行登記設定互斥訊號量sin,初值1,表示當前可用

begin

sin,sout,seat:semaphore;

seat :=1

; sout :=1

;cobegin

process reader-

i(i =1,

2,..

.,n)

; begin

p(seat);p

(sin)

; 登記;

v(sin)

; 進入閱覽室;

讀書;離開閱覽室;

p(sout)

; 登出;

v(sout);v

(seat)

; end

coend;

end;

pv操作題目分析步驟:

1.關係分析。找出題目中描述的各個程序,分析他們之間的同步、互斥關係

2.整理思路。根據各程序的操作流程確定p、v操作的大致順序。

3.設定訊號量。設定需要的訊號量,並根據題目條件確定訊號量初值。(互斥訊號量初值一般為1,同步訊號量的初值要看對應資源的初始值是多少)

程序互斥解題步驟:

1.確定臨界資源的個數

2.確定程序的關鍵工作步(使用到臨界資源)

3.確定訊號量的初值(臨界資源的個數)

4.寫出偽**

實現互斥的p操作一定要在實現同步的p操作之後

v操作不會導致程序阻塞,因此兩個v操作順序可以交換

前v後p

p操作:進入臨界區前

v操作:離開臨界區後

訊號量機制

1 訊號量的型別定義 訊號量 semaphore 的資料結構為乙個值和乙個 指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。一般來說,訊...

訊號量機制

訊號量機制 整型訊號量 p操作 wait s.value s.value 1 if s.value 0 then block s,l v操作 signal s.value s.value 1 if s.value 0 then wakeup s,l 定義訊號量semaphore代表可用資源實體的數量...

訊號量機制

整型訊號量符合 有限等待 原則 signal釋放資源後,當cpu被分配給等待程序後,等待程序仍可繼續執行,可以符合 有限等待 但整型訊號量不符合 讓權等待 原則 整型訊號量的wait操作,當s 0時,當前程序會佔著cpu不斷測試 訊號量原語不能被打斷,這個占有cpu的程序會一直不斷的佔據cpu迴圈下...