进程间通讯之信号量

本文介绍了信号量作为进程同步控制的一种机制,详细阐述了临界区、原子操作、P、V操作的概念,并讲解了如何使用信号量进行资源访问控制。重点解析了信号量的创建、初始化、增加(V操作)和释放过程,以及相关系统调用如semget、semctl和semop的用法。
摘要由CSDN通过智能技术生成

信号量:进程同步控制

共享资源(临界资源):同一时刻只允许一个进程使用的资源

临界区  ---》     使用临界资源的代码区域

原子操作 ----》     不能被中断的操作

P、V操作:

    P操作 -1 使用资源之前进行P操作

    V操作 +1 使用资源之后释放资源

信号量定义:对资源访问控制的计数器。当其>0时,计数器的值代表能被访问的临界资源的个数。当其<0时,代表等待使用临界资源的进程个数。

信号量操作:

创建获取:

   int semget((key_t) key, int nsems, int flg);

如果semget调用的是创建信号量集,那么nsems就代表信号量集中信号量的个数。否则,nsems无作用。

参数解释

key:所创建或打开信号量集的键值。需要是唯一的非零整数。
nsems:创建的信号量集中的信号量的个数,该参数只在创建信号量集时有效。几乎总是取值为1.
flag:调用函数的操作类型,也可用于设置信号量集的访问权限,两者通过 | 表示
返回值说明:
  如果成功,则返回信号量集的IPC标识符(一个正数)。
  如果失败,则返回-1,errno被设定成以下的某个值
EACCES:没有访问该信号量集的权限
EEXIST:信号量集已经存在,无法创建
EINVAL:参数nsems的值小于0或者大于该信号量集的限制;或者是该key关联的信号量集已存在,并且nsems

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值