引用自
所需標頭檔案
#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...