用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。
與普通整數變數的區別:對訊號量的操作只有三種,
初始化,p操作,v操作。
p操作:相當於wait原語,進入區
v操作:signal原語,相當於退出區。
大體實現:
wait()方法一氣呵成,避免併發導致的問題。
但是不滿足「讓權等待原則」,程序會處於忙等的狀態。
int s=1;
void
wait
(int s)
void signal (
int s)
/記錄型訊號量的定義/
typedef
struct
semaphore;
/*某程序需要使用資源時,通過wait原語申請*/
void
wait
(semaphore s)
}// 程序使用完資源後,通過signal原語釋放資源
void
signal
(semaphore s)
}
s.value的初始值表示系統中某種資源的數目。 對訊號量s的一次p操作意味著程序請求乙個單位的該類資源,因此需要執行s.value--,表示資源數減1,當s.value<0時表示該類資源已經被分配完畢,因此使申請資源的程序呼叫block原語進行自我阻塞(執行態->阻塞態),主動放棄處理機,並插入該類資源等代佇列中,該實現遵循了讓權等待原則,不會出現忙等現象。 v操作中,一定是先s.value++,如果加一後,s.value仍然大於等於0,表示依然有程序在等待該類資源。 可能需要執行wakeup原語。 記錄型訊號量實現系統資源的申請和釋放,還可以實現程序的互斥和同步。
訊號量機制實現程序互斥
1、分析併發程序的關鍵活動,滑動臨界區
2、設定互斥訊號量mutex,初始值為1
3、在臨界區之前執行p
4、在臨界區之後執行v
注意:對於不同的臨界資源需要設定不同的互斥訊號量
p,v操作必須成對出現。缺少p操作不能保證程序互斥訪問資源,缺少v操作,導致資源永不被釋放,等待的程序永遠不被喚醒。
訊號量實現程序同步
分析問題,找出**需要實現「一前一後的」同步關係
設定同步訊號量,初始值為0
在「前操作」之後執行v操作
在「後操作之前」執行p操作。
訊號量實現程序的前驅關係
分析問題劃出前驅圖,把每乙個前驅關係都看成乙個同步問題
為每一對前去關係設定同步訊號量,初始值為0
在「前操作」之後執行v操作
在「後操作之前」執行p操作。
作業系統之 訊號量機制
訊號量機制是一種卓越成效的程序同步工具,訊號量機制已經被廣泛的使用於單處理機,和多處理系統的計算機網路中。訊號量s 是乙個整數,s大於等於零代表可供併發程序使用的資源實體數,當 s小於零時則表示正在等待使用臨界區的程序數,整型訊號量 整型訊號量定義乙個用於表示資源數目的整型量數目s 但是僅能通過兩個...
作業系統 2 3訊號量機制
荷蘭科學家 dijkstra 狄克斯特拉 提出的一種卓有成效的程序同步機制。1 整型訊號量 1.訊號量定義為乙個 整型量 2.根據初始情況賦相應的值 3.僅能通過 兩個原子操作 來訪問。p操作 wait s while s 0 do no op s s 1 v操作 signal s s s 1 2....
作業系統之訊號量機制
使用者程序可以使用作業系統提供的原語來操作訊號量,以實現程序的互斥和同步 原語是一塊不可中斷的程式段,由關中斷實現 這對原語是wait signal 又稱為p v操作 訊號量可分為整形訊號量記錄型訊號量 程序的互斥需要遵守 四個原則,空則讓進,忙則等待,有限等待,讓全等待 由圖可以看出,在進行p操作...