14.1 二值信号量

1 信号量简介

信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。

假设有一个人需要在停车场停车 :

1)首先判断停车场是否还有空车位(判断信号量是否还有资源);

2)停车场正好有空车位(信号量有资源),那么就可以直接将车开入空车位进行停车(获取信号量成功);

3)停车场已经没有空车位了(信号量没有资源),那么这个人可以选择不停车(获取信号量失败);也可以选择等待(任务阻塞),其他人将车开出停车场(释放信号量资源),然后再将车停入空车位。

空车位:信号量资源数(计数值)

让出占用车位:释放信号量(计数值++)

占用车位:获取信号量(计数值--)

当计数值大于0,代表有信号量资源。

当释放信号量,信号量计数值(资源数)加一

当获取信号量,信号量计数值(资源数)减一

信号量的计数值都有限制:限定最大值

信号量:用于传递状态。 

如果最大值被限定为1,那么它就是二值信号量;如果最大值不是1,它就是计数型信号量

队列与信号量的对比:

队列 信号量

可以容纳多个数据;

创建队列有两部分内存:队列结构体 + 队列项存储空间

仅存放计数值,无法存放其他数据;

创建信号量,只需分配信号量结构体

写入队列:当队列满时,可阻塞;

释放信号量:不可阻塞,计数值++

当计数值为最大值时,返回失败

读取队列:当队列为空时,可阻塞;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值