信号量

信号量主要用来实现进程间的同步问题,避免并发访问共享资源
在实际应用中,两个进程间通信可能会使用多个信号量,因此Linux在管理是以信号量集来管理

这里写图片描述
信号量集合使用指针指向一个由数组组成的信号量单元,在此信号量单元中存储了个信号量的值
这里写图片描述


1、创建信号量集合(semget)

这里写图片描述


2、控制信号量集合、信号量(semctl)

这里写图片描述
该函数最多可有4个函数。当第三个参数为SETVAL/SETALL,即对信号量的设置,就要有第四个参数
这里写图片描述

  • 如果操作是SETVAL,则第四个值为val,是相应信号量的值。
  • 如果操作为SETALL&GETALL,则第四个参数为数组地址。
删除信号量

semctl函数的第二个参数设为IPC_RMID;
或者用命令删除ipcrm -S key


3、信号量操作(semop)

这里写图片描述

用semop函数完成PV操作
struct sembuf
{
       unsigned short sem_num;  /* semaphore number */ 信号量下标
       short          sem_op;   /* semaphore operation */  -1 / +1
       short          sem_flg;  /* operation flags */   0
}
struct  sembuf sops[2];
/*P操作*/
sops[0].sem_num=1;
sops[0].sem_op=-1;
sops[0].sem_flg=0;
/*V操作*/
sops[1].sem_num=2;
sops[1].sem_op=1;
sops[1].sem_flg=0;

上面的代码表示对信号量1进行P操作(-1),对第二个信号量进行V操作(+1)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值