訊號量函式(semget semop)

2021-07-30 02:48:51 字數 1403 閱讀 6577

引用自

所需標頭檔案

#include

#include

#include

int semget(key_t key,int nsems, int sem***)

執行成功則得到乙個訊號量集識別符號

或建立乙個訊號量集物件,出錯返回-1,原因存在error中。

key:0(ipc_private):會建立新訊號集物件

nsems:建立訊號量集中訊號量的個數,該引數只在建立訊號量時有效

msg***:0:取訊號量集識別符號,若不存在則函式會報錯

ipc_creat:當semg***&ipc_creat為真時,如果核心存在鍵值與key相等的訊號量集,返回此訊號量集的識別符號,如果不存在,則新建乙個訊號量集;

ipc_creat|ipc_excl:如果核心中不存在鍵值與key相等的訊號量集,則新建乙個訊息佇列;如果存在則報錯。

int semop(int semid,structsembuf*sops,unsigned nsops)

成功返回訊號量的個數,失敗返回-1,錯誤原因存於error中。

semid:訊號量集識別符號

struct sembuf;

nsops:進行操作訊號量的個數,即sops結構變數的個數,需大於或等於1。

下面是訊號量操作舉例。

structsembuf sem_get=; /*

將訊號量物件中序號為

0的訊號量減

1*/structsembuf sem_get=;  /*

將訊號量物件中序號為

0的訊號量加

1*/structsembufsem_get=;           /*

程序被阻塞,直到對應的訊號量值為

0*/flag

一般為0

,若flag

包含ipc_nowait

,則該操作為非阻塞操作。若

flag

包含sem_undo

,則當程序退出的時候會還原該程序的訊號量操作,這個標誌在某些情況下是很有用的,比如某程序做了

p操作得到資源,但還沒來得及做

v操作時就異常退出了,此時,其他程序就只能都阻塞在

p操作上,於是造成了死鎖。若採取

sem_undo

標誌,就可以避免因為程序異常退出而造成的死鎖。

關於ftok()函式

key_t ftok(const char *pathname,    //指定的檔名,這個檔案必須存在且可以訪問

int proj_id);      //子序號它是乙個8bit整數。即範圍是0-255.

int semctl(int semid,int semnun,int cmd ,union semun arg)

當函式執行成功,則會返回key_t鍵值,否則返回-1。

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...

訊號 訊號量

訊號是由 系統或者程序傳送給目標程序的資訊,以通知目標程序某個狀態的改變或系統異常。linux訊號可以由如下條件產生 1 對於前台程序,使用者可以通過輸入特殊的終端字元來給它傳送訊號。比如輸入ctrl c通常或給程序傳送乙個中斷訊號 2 系統異常。比如浮點異常和非法記憶體段訪問。3 系統狀態變化 4...