訊號量
訊號量是乙個計數器,用來表示系統資源的數量,訊號量用於多程序對共享資料物件的訪問,來實現程式的同步互斥。為了正確實現訊號量,訊號量的加減操作必須是原子操作,因此,訊號量也是在核心中實現的。
先看一下同步互斥和原子操作:
同步互斥
互斥
乙個程序占用資源,其它程序就不能使用該資源,程序間的這種關係為程序互斥。
這些只能被乙個程序同時使用的資源被稱為臨界資源。
程序中訪問臨界資源的一段需要互斥執行的**稱為臨界區。
訪問臨界區的條件是臨界資源沒有被占用。
舉個例子:假如廁所只有乙個坑,乙個人蹲上了,那麼其他的人就不能再蹲了,這個坑就是臨界資源。同步
當程序a的執行依賴程序b的執行結果時,程序之間的執行必須存在一定的順序關係,這種關係稱為程序的同步。
原子操作
原子操作是指一次不存在任何中斷和失敗的操作,要麼操作成功,要麼操作沒有執行,不存在部分執行的狀態。
在此概念產生的那個年代,物理學的最小單位還是原子,因此這裡原子是指不可在分割的整體。
訊號量和 p、v原語
p、v操作
假設用s表示資源數的個數,p、v操作分別表示對s的減和加操作
v()操作(verhoog,荷蘭語增加)
訊號量的偽**實現
struct semaphore
;
p原語
p(s)
}
v原語
v(s)
}
訊號量相關函式相關指令原型 引數
返回值
shmctl函式
原型 引數
返回值
semop函式
原型 引數
返回值
sembuf結構體
struct sembuf
;
ipcrm -s semid
**實現
☛訊號量的**
程序通訊之訊號量
1 訊號和訊號量 訊號與訊號量是不同的兩種事物。訊號量是用來調協程序對共享資源的訪問的。為了防止出現因多個程式同時訪問乙個共享資源而引發的一系列問 題,通過生成並使用令牌來授權,在任一時刻只能有乙個執行執行緒訪問 的臨界區域。臨界區域是指執行資料更新的 需要獨佔式地執行,而訊號量就可以提供這樣的一種...
程序通訊之訊號量
一 訊號量 訊號燈 概念 訊號量提供一種訪問機制,讓乙個臨界區同一時間只有乙個程序在訪問他,也就是說訊號量用來協調程序對共享資源的訪問的。訊號量是乙個特殊的變數,程式對其訪問都是原子操作,只允許對他進行等待 p 和傳送資訊 v 的操作。最簡單的訊號量只能取0和1的變數,這也是訊號量最常見的一種形式,...
程序通訊之訊號量
程序通訊之訊號量 一 引言 我們知道在一條單軌鐵路上,任何時候在上面只能有一列列車行駛在上面。而管理這條鐵路的系統就是訊號量,任何一列列車必須等到表明可以行駛的訊號確認以後才能進入鐵路。當一列列車進入軌道行駛時,需要將軌道改為禁止其他列車進入,從而防止不知情的列車進入軌道,發生衝突。而當列車行駛完這...