Linux 之信号量通信机制

信号量通信机制主要用于实现进程间的同步,避免并发访问共享资源。其过程与数据结构与消息队列很相似。
1、使用函数semget()创建信号量集合:

// from /usr/include/sys/sem.h
int semget(key_t key,int sems,int flag);

函数第一个参数为ftok()产生的键值,第二个为创建的信号量个数,第三个表示信号量集合的权限及属性。同消息队列:

//from /usr/include/bit/ipc.h
#define  IPC_CREAT  00001000  //如果key值不存在则创建
#define  IPC_EXCL   00002000  //如果key存在,则返回失败
#define  IPC_NOWAIT 00004000  //如果需要等待时,直接返回错误

2、使用函数semctl信号量集合或信号量:

//from /usr/include/sys/sem.h
int semctl(int semid,int semnum,int cmd,...);

函数第1个参数为semget返回的信号量集合id,第2个参数为操作信号量时,要操作的信号量的编号 。第3个参数为要执行的操作,如果是要操作整个信号量集合的话,其值包括:

//from /usr/include/linux/ipc.h
#define  IPC_RMID  0    // 立即删除消息队列
#define  IPC_SET   1    // 设置buf中的消息队列属性
#define  IPC_STAT  2    // 获取消息队列的属性并保存在buf中
#define  IPC_INFO  3    // 获取限制信息

如果只是操作单个信号量,其选项包括:

#define GETPID  11  //获取信号拥有者的pid
此时,第2个参数应为0,第4个参数无效,如果执行成功,将返回该进程的pid,否则返回-1#define  GETVAL 12  //返回获取某个信号量的值
此时,第2个参数为某信号量的编号

#define  SETVAL 16  //设置某信号量的值
此时,第2个参数为某信号量的编号,第4个参数为要设置的值

#define SETALL  17  //设置所有信号量的值
此时,第2个参数为0,第4个参数为欲设置的信号量值的数组首地址
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值