linux应用开发-信号量互斥编程
一 相应的函数
1 创建/打开信号量集合
函数名 semget
函数原形 int semget(key_t key, int nsems, int semflg)
函数功能
获取信号量集合的标识符
当key所指的信号量不存在的时候,且semflg里包含了IPC_CREAT,就会创建一个信号量的集合
所属头文件
<sys/types.h> <sys/ipc.h> <sys/sem.h>
返回值
成功返回信号量的标识符
失败返回-1
参数说明
Key为键值,即内核数字与项目ID结合
nsems为产生信号量的个数
semflg标志,可以去IPC_CREAT
2 操作信号量
函数名 semop
函数原形 int semop(int semid, struct sembuf *sops, unsigned nsops)
函数功能
操作信号量集合里面的信号量
所属头文件
<sys/types.h><sys/ipc.h><sys/sem.h>
返回值
成功返回0
失败返回-1
参数说明
semid:要操作的信号量的标识符
sops:要操作多少个信号量
nsops:对信号量执行什么样的操作
3 产生键值
键值是文件在内核产生的数值与项目id结合的数
key = key_t ftok(char *fname, int id)
4 控制信号量
semctl(int semid, int semnum, int cmd...)
semid信号量标识符
semnum信号量编号
cmd相应的指令入GETVAL,SETVAL等等
上图为A进程,下图为B进程,两者利用信号量进行通信
时间: 2024-10-21 04:06:56