整型訊號量符合「有限等待」原則
signal釋放資源後,當cpu被分配給等待程序後,等待程序仍可繼續執行,可以符合「有限等待」。
但整型訊號量不符合「讓權等待」原則
整型訊號量的wait操作,當s ≤0時,當前程序會佔著cpu不斷測試;
訊號量原語不能被打斷,這個占有cpu的程序會一直不斷的佔據cpu迴圈下去,陷入忙等。
改進:條件不符時應能夠主動放棄cpu
新問題:放棄cpu的程序進入阻塞佇列:因等待某訊號量而放棄cpu的等待程序會有「若干」個,需將它們組織管理起來,並在合適的時候喚醒。
• 定義訊號量semaphore代表可用資源實體的數量。又叫訊號燈。
• 當≥0,代表可供併發程序使用的資源實體數
• 當<0,表示正在等待使用該資源的程序數。
建立乙個訊號量必須經過說明,包括
• 訊號量所代表的意義
• 賦初值
• 建立相應的資料結構,以便指向等待使用臨界區的程序。
除初值外,訊號量的值僅能由標準原子操作p、v操作來改變。 pv操作是荷蘭語通過和釋放的意思。
3)訊號量的基本應用
實現程序互斥
實現程序間的前趨關係(有序)
互斥訊號量注意點:
互斥訊號量mutex初值為1;
每個程序中將臨界區**置於p(mutex)和v(mutex)原語之間
必須成對使用p和v原語(在同一程序中),不能次序錯誤、重複或遺漏:
遺漏p原語則不能保證互斥訪問
遺漏v原語則不能在使用臨界資源之後將其釋放(給其他等待的程序);
控制同步順序的注意點
訊號量值為0的點是限制的關鍵所在;
成對使用p和v原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯。
1)如何利用互斥訊號量解決上次課兩個加法程序對共享變數操作的問題?
4)and型訊號量
出現原因:一些應用往往需要兩個或多個共享資源,而不是前述的乙個資源。程序同時要求的共享資源越多,發生死鎖可能性越大。
解決思想:
一次性分配給程序所需資源,用完一起釋放。wait操作時對它所有需要的資源都要判斷,有and條件,故稱「and同步」、「同時wait」。
訊號量機制
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代表可用資源實體的數量...
訊號量機制
部落格首發鏈結 訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。訊號量機制即利用pv操作來對訊號量進行處理。什麼是訊號量?訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量...