System V IPC之信号灯
信號燈也叫信號量 用于進程/線程同步或互斥的機制
?
信號燈的類型
1.Posix 無名信號燈
2.Posix 有名信號燈
3.System V 信號燈
?
信號燈的含義
計數信號燈(1和2都是)
System V信號燈是一個或多個計數信號燈的集合(可操作集合中的多個信號燈)
?
??????????????????????????????????????? System V 信號燈使用步驟
?
?打開 / 創建 信號燈 semget
?
信號燈初始化 semctl
?
P/V 操作 semop
?
刪除信號燈semctl
?
????????????????????????????????????????????? 信號燈的創建/打開
?
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg )
?
成功返回信號燈ID 失敗返回-1
key 和消息隊列關聯的key IPC_PRIVATE 或 ftok
nsems 集合中包含的計數信號燈個數
semflg 標志位IPC_CREAT | 0666 IPC_EXCL
?
?
????????????????????????????????????????????? 信號燈初始化
?
#include <sys/ipc.h>
#include <sys/sem.h>
?
int semctl(int semid, int semnum, int cmd, ...)
?
成功返回0 失敗返回EOF
semid 要操作的信號燈集id
semnum 要操作的集合中的信號燈編號
cmd 執行的操作 SEVAL IPC_RMID
union semun 取決于cmd
union semun
{
int val; //要初始化的值
struct semid_ds *buf;
unsinged short *array;0;
struct seminfo *_buf;
}
?
???????????????????????????????????????????????????????????????? 信號燈 P/V操作
?
#include <sys/ipc.h>
#include <sys/sem.h>
int semop(int semid, struct sembuf *sops, unsigned nsops)
?
成功返回0 失敗返回-1
semid 要操作的信號燈集id
sops 描述對信號燈操作的結構體(數組)
nsops 要操作的信號燈的個數
?
struct sembuf
{
short semnum;
short sem_op;
short sem_flg;
}
?
semnum 信號燈編號
sem_op -1 : P操作 1 :V操作
sem_flg 0(操作不成功則一直阻塞 直到成功為止) / IPC_NOWAIT
總結
以上是生活随笔為你收集整理的System V IPC之信号灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷儿童票怎么买
- 下一篇: LOL克剑姬的英雄有谁?