程序通訊之訊號量

2021-08-17 17:43:35 字數 1305 閱讀 3846

訊號量

訊號量是乙個計數器,用來表示系統資源的數量,訊號量用於多程序對共享資料物件的訪問,來實現程式的同步互斥。為了正確實現訊號量,訊號量的加減操作必須是原子操作,因此,訊號量也是在核心中實現的。

先看一下同步互斥和原子操作:

同步互斥

互斥

乙個程序占用資源,其它程序就不能使用該資源,程序間的這種關係為程序互斥。

這些只能被乙個程序同時使用的資源被稱為臨界資源。

程序中訪問臨界資源的一段需要互斥執行的**稱為臨界區。

訪問臨界區的條件是臨界資源沒有被占用。

舉個例子:假如廁所只有乙個坑,乙個人蹲上了,那麼其他的人就不能再蹲了,這個坑就是臨界資源。

同步

當程序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的變數,這也是訊號量最常見的一種形式,...

程序通訊之訊號量

程序通訊之訊號量 一 引言 我們知道在一條單軌鐵路上,任何時候在上面只能有一列列車行駛在上面。而管理這條鐵路的系統就是訊號量,任何一列列車必須等到表明可以行駛的訊號確認以後才能進入鐵路。當一列列車進入軌道行駛時,需要將軌道改為禁止其他列車進入,從而防止不知情的列車進入軌道,發生衝突。而當列車行駛完這...