訊號量機制

2021-09-01 20:48:09 字數 1699 閱讀 8056

訊號量機制

整型訊號量

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代表可用資源實體的數量,又叫訊號燈

當》=0,代表可供併發程序使用的資源實體數

當<0,代表正在等待使用該資源的程序數

建立乙個訊號量必須經過說明,包括

訊號量所代表的意義

賦初值建立相應的資料結構,以便指向等待使用臨界區的程序

除初值外,訊號量的值僅能由標準原子操作p,v操作來改變

實現多個程序互斥

設定一互斥訊號量mutex,初值為1

程序ip(mutex);(s.value=s.value-1; if s.value<0 then block(s,l))

critical section 操作共享資源r

v(mutex);(s.value=s.value+1; if s.value<=0 then wakeup(s,l))

remainder section

互斥訊號量注意點

1.互斥訊號量mutex初值為1

2.每個程序中將臨界區**置於p(mutex)和v(mutex)原語之間,必須成對使用p和v原語(同一程序中),不能次序錯誤,重複或遺漏:

遺漏p原語則不能保證互斥訪問

遺漏v原語則不能在使用臨界資源之後將其釋放(給其他等待的程序)

控制同步順序的注意點

訊號量值為0的點是限制的關鍵所在

成對使用p和v原語(在有先後關係的兩個程序中),不能次序錯誤,重複或遺漏,否則同步順序出錯

民航售票系統問題

n個售票處,每個售票處通過終端訪問系統的公用資料庫

假定公用資料區中分別用ri表示某時間i次航班的現存票數

pi表示某售票處的處理程序,試用訊號量實現程序間的互斥關係

and型訊號量

出現原因:一些應用往往需要兩個或多個共享資源,而不是前述的乙個資源,程序同時要求的共享資源越多,發生死鎖的可能性越大

解決思想:

一次性分配給程序所需資源,用完一起釋放。

wait操作時對他所有都要判斷,有and條件,故稱and同步、同時wait。

訊號量機制

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

訊號量機制

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

訊號量機制

部落格首發鏈結 訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。訊號量機制即利用pv操作來對訊號量進行處理。什麼是訊號量?訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量...