信号量——多线程

信号量的本质就是一个计数器
在多线程访问临界资源的时候,如果临界资源中又有很多份分好的资源,那么就可以通过信号量来表示里面还有多少份资源,且每份资源只有一个线程可以访问

线程申请信号量成功,就一定有一份资源是你的:P操作
释放信号量:V操作
以此信号量就可以保护玲临界资源了。

环形变量基于信号量的互斥和同步
之前我们写的生产消费模型:两种线程访问的是一个整体临界资源,所以只允许一个线程进入临界区。通过锁来保护临界区,通过条件变量来实现合理的同步机制。

但是如果整体的临界区中又分为很多份资源,那么就允许同时多个线程访问这个整体,——并行,但是其中的每小份资源又只允许一个线程进来——互斥
——想要实现这样的功能就可以用信号量来维护。
在这里插入图片描述

基于信号量的互斥和同步

申请信号量也是原子的
和之前我们用锁+条件变量写的生产消费模型的不同:
1、之前的两种线程访问的都是一个整体的资源(阻塞队列)——所以把这个队列的操作用锁保护为临界区,而这里的是一个环形队列,里面又分为了很多小份,每份允许一个线程进入——所以要用两把锁,一把是保护正在生产的那一份资源,另一份保护的是正在消费的那一部分
2、有了信号量就不用考虑每次进入临界区是否有资源,只要进入就一定有资源,这样就可以不用条件变量的等待队列了。
当为满的时候,就会出现生产一个消费一个——同步(为空也一样)
在这里插入图片描述
在这里插入图片描述
注意:释放的是对方的信号量:
在这里插入图片描述
代码:
j基于线程的信号量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值