linux的ipc訊號量簡單例項

2021-07-03 19:24:57 字數 1194 閱讀 6605

訊號量實現程序間訪問互斥的資源測試例子。

主要涉及到的函式及原型如下(加粗、顏色表示要重點關心的上下文相關變數)

1: key_tftok(char *filename, int id);//目的獲取key值

2: intsemget(key_t key, int nsems, int sem***)//目的獲取id

3:int semctl(int semid, int semnum, int cmd, union semunarg)//目的設定訊號量的值,獲取訊號量的值等等,功能通過cmd變數控制

//其中semunarg必須由使用者自身定義,格式如下

union semun ;

4: int semop(int semid, struct sembuf *sops, unsign ednsops)//目的改變訊號量的值,在sembuf中。

可通過每個函式大體功能,man手冊中查詢一些說明,進行研究測試。

以下測試**非常簡單,僅僅是為了熟悉api的基本功能,如果有錯誤和需要說明的地方,歡迎指正。

#include

#include

#include

#include

#include

#include

#include

union semun ;

int sem_init(int semid, int initval)//初始化訊號量 init val

int creat_sem(char *filename)//建立乙個訊號燈,訊號量預設寫了1個,如果沒有該訊號量,建立,如果有,獲取id

if ((id = semget(key, 1, ipc_creat | ipc_excl |0660)) < 0)

printf("sem allready exist: id = %d\n", id);

} else

return id;

}void p(int semid)//申請資源,資源數sembuf中的sem_op - 1

}void v(int semid)//釋放資源,資源數sembuf中的sem_op - 1

}void showstat(int semid)

int main(int argc, char **argv)

} else

}return 0;

}

IPC 訊號量集

ipc通訊機制 訊號量集 1.int semget key t key,int nsems,int sem 第乙個引數是由ftok 獲取的key 第二個引數是要建立的訊號量的個數,如果是0表示獲取訊號量集id 第三個引數是ipc creat,建立訊號量集id。返回乙個訊號量集的id semid.se...

IPC之 訊號量集 多個訊號量

如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量 互斥鎖 來解決 柵欄模型 實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次 include include include include include include include include define ...

IPC物件之訊號量

1.訊號量 1 訊號量 semaphore 也叫訊號燈。它是不同程序間或乙個給定程序內部不同執行緒間同步的機制。2 二值訊號量 值為0或1。與互斥鎖類似,資源可用時值為1,不可用時值為0。3 計數訊號量 值在0到n之間。同來統計資源,其值代表可用資源數。4 等待操作是等待訊號量的值變為大於0,然後將...