訊號量機制
整型訊號量
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 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量...