linux应用开发-信号量互斥编程

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进程,两者利用信号量进行通信
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。