System V信号量

上一篇笔记中,学习了Posix信号量。这篇笔记主要学习System V信号量,该信号量增加了信号量集的方式。
创建

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);
  • key:信号量的标识符,可以使用ftok函数获取
  • nsems:信号量的个数
  • semflg:操作符号,比如O_CREAT方式
  • Return Value:成功返回信号量标识符,失败返回-1

一般操作操作

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semop(int semid, struct sembuf *sops, size_t nsops);
int semtimedop(int semid, struct sembuf *sops, size_t nsops,
               const struct timespec *timeout);
  • semidsemget返回的标识符
  • sops:需要操作的信号量集的首地址
  • nsops:信号量集中元素的个数
  • timeout:超时参数

sembuf含有一下几个参数:

  • unsigned short sem_num:需要操作的信号量的编号,从0开始,最大是nsems - 1。操作是原子的。
  • short sem_op:需要对信号量的操作。如果是个正数,则对应的信号量每次增加正数个单位。如果sem_flg指定为SEM_UNDO,那么减去相应的单位。如果是0,表示等待到0,即如果信号量是0,则立刻执行操作。
  • short sem_flg:信号量的标志,有IPC_NOWAITSEM_UNDO两个标志
  • Return Value:成功返回0,失败返回-1

更改操作
该操作比较复杂,具体直接参考手册。

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int semctl(int semid, int semnum, int cmd, ...);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值