linux中與 訊號量有關的函式

2021-08-09 00:15:37 字數 1377 閱讀 3349

1,semget函式

semget函式的作用:建立乙個新訊號量或者取得乙個已有訊號量的鍵。

int semget(key_t  key,int num_sems,int sem_flags);

第乙個引數:key是整數值,不相關的程序可以通過它訪問同乙個訊號量。程式對所有的訊號量的訪問都是間接的,它先提供乙個鍵,再由系統生成乙個相應的訊號量識別符號。只有 只有semget函式才直接使用訊號量鍵,所有其他的訊號量函式都是使用semget函式返回的訊號量的表示符。

第二個引數:num_sems引數是指定需要的訊號量的數目。它幾乎總是取值為1.

第三個引數:sem_flags引數是一組標誌,它的低端的9個位元是訊號量的許可權,也可以和值ipc_creat做按位或操作,來建立乙個新的訊號量。即使在設定了

ipc_creat標誌後,給出的鍵是乙個已有的訊號鍵,也不會產生錯誤,如果函式用不到ipc_creat標誌,該標誌就會悄悄的被忽略掉,我們可以通過聯合使用標誌ipc_creat和ipc_excl來確保建立乙個新的,唯一的訊號量。如果訊號量已經存在,它將返回乙個錯誤。

返回值:semget函式在成功時返回乙個正數(非零)值,它就是其他訊號量的識別符號。如果失敗,則返回-1。

2.semop函式

函式的作用:semop函式用來改變訊號量的值。

int semop(int sem_id ,struct *sem_ops,size_t num_sem_ops);

第乙個引數:sem_id是由semget返回的訊號量的識別符號。

第二個引數:sem_ops是指向乙個結構陣列的指標,每個陣列元素至少包含以下幾個成員:

struct sembuf

第三個引數:訊號操作結構的數量,恆大於或等於1.

3.semctl函式(可變參函式)

函式作用:用來直接控制訊號量資訊。

int semctl(int sem_id , int sem_num,int command,...);

第乙個引數:sem_id是由semget返回的訊號量的識別符號。

第二個引數:是訊號量編號,當需要用到一組訊號量時,就要用到這個引數,它的一般取值為0,表示這是第乙個也是唯一的乙個訊號量。

第三個引數:command引數是將要採取的動作。command通常是下面兩個的乙個:

setval:用來把訊號量初始化為乙個已知的值。p這個值通過union semun中的val成員設定,其作用是在訊號量第一次使用。

ipc_rmid:用於刪除乙個已經無需繼續使用的訊號量的識別符號。

如果有第四個引數:它是乙個union semun結構。它至少包含以下幾個成員:

union  semun

返回值:semctl函式根據command引數的不同返回不同的值。對於setval和ipc_rmid,成功時返回0,失敗時返回-1.

systemV訊號量 與 Posix訊號量

一 函式上的區別 訊號量有兩種實現 傳統的system v訊號量和新的posix訊號量。它們所提供的函式很容易被區分 對於所有system v訊號量函式,在它們的名字裡面沒有下劃線。例如,應該是semget 而不是sem get 然而,所有的的posix訊號量函式都有乙個下劃線。下面列出了它們提供的...

Linux的訊號量

訊號量 semaphore 與已經介紹過的 ipc 結構不同,它是乙個計數器。訊號量用於實現程序間的互斥與同步,而不是用於儲存程序間通訊資料。1 訊號量用於程序間同步,若要在程序間傳遞資料需要結合共享記憶體。2 訊號量基於作業系統的 pv 操作,程式對訊號量的操作都是原子操作。3 每次對訊號量的 p...

整型訊號量與記錄型訊號量

訊號量機構是一種功能較強的機制,可用來解決互斥與同步的問題,它只能被兩個標準的原語wait s 和signal s 來訪問,也可以記為 p操作 和 v操作 原語是指完成某種功能且不被分割不被中斷執行的操作序列,通常可由硬體來實現完成不被分割執行特性的功能。如前述的 test and set 和 sw...