信号量

一. 相关概念
1.对信号量的基本定义

    信号量本质上是一个计数器,里面的数字大小来记录临界资源的数目,其中有多少资源,信号量的大小就是多少,当信号量的值为1的时候,此时的信号量就叫做二元信号量,又称为互斥锁。同时需要注意的是信号量也属于临界资源,它的存在是为了保护临界资源,解决数据不一致的现象。
    因此为了保证信号量的临界访问,于是就约定对信号量的操作必须满足原子操作。

2.进程互斥

    由于进程需要互相某些资源,因此各进程之间需要互斥访问某些资源,进程的这种关系叫做进程之间的互斥(在如何时间点,对临界区的访问只允许一个进程对其访问).
    系统中某些资源一次只允许一个进程对其操作,我们称这种资源叫做临界资源.而在进程中访问临界资源的那段代码就叫做临界区.

3.信号量的 P V 操作

    当P V操作在一个进程中执行的时候,就必须满足互斥原理,当 P V 不在同一个进程中的之后,此时必须满足同步性(以相对较安全的顺序访问资源,防止进程饥饿现象)
    (1)对临界资源进行 P 操作时, 对应的信号量的只需要减1
    (2) 对临界资源进行 V 操作时, 对应的信号量的值就需要 加 1.

二. 信号量的相关函数以及信号量数据结构
1.信号量数据结构

这里写图片描述

2.创建信号量集的函数

这里写图片描述
    (1) key 是信号量集的名字
    (2) nesms 是表示信号量集中的信号量的个数
    (3) semflg 的设置系统中规定为 IPC_CREAT, IPC_EXCL, 用户可以根据自己的需求对其设置, 当设置了IPC_CREAT 和 IPC_EXCL 时, 即就是当系统中没有信号量集的时候系统创建一个新的信号量集, 当系统中已经有信号量集的时候就会报错,而当只单独设置了 IPC_CREAT 的时候,当系统中没有信号量集合的时候就创建一个新的信号量集, 当系统中已经有信号量集的时候, 系统将返回系统中已有的信号量集的id
    (4) 函数执行成功时返回信号量集的标识 id,失败时返回 -1

3.信号量集的控制函数

这里写图片描述
    (1) semid 是有shmget 返回的信号量集标识符
    (2) semum 是表示信号量集中信号量的数目
    (3) cmd 表示要对信号量采取的相应动作, 包括一下几个取值
这里写图片描述
    函数成功调用时返回 0, 函数调用失败时返回 -1

4. P V 操作函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值