建设银行公积金预约网站,东营网红,高埗镇仿做网站,网站建设的定位前提
1.信号量的本质是一把计数器
2.申请信号本质就是预订资源
3.PV操作是原子的!
将一个公共资源当做整体访问--锁
如果公共资源不当做整体使用#xff0c;多进程可以并发的访问公共资源#xff0c;但不是同一个区域#xff0c;为了将资源均分#xff0c;所以有了…前提
1.信号量的本质是一把计数器
2.申请信号本质就是预订资源
3.PV操作是原子的!
将一个公共资源当做整体访问--锁
如果公共资源不当做整体使用多进程可以并发的访问公共资源但不是同一个区域为了将资源均分所以有了信号量。
我们在申请信号量预订了某个区域的资源我们需要判断资源是否准备就绪吗
不需要我们只要申请成功这份资源就只属于我可以直接使用 认识接口
初始化 第一个参数可以设置为全局或者局部
第二个参数是决定是否在线程间共享还是在进程间共享
第三个参数为资源个数
P操作 V操作
发布信号量 销毁 基于环形队列的CP问题 生产者生产一个往后走一个直到走到消费者的前一格此时不能往前走因为会覆盖自己历史的数据
因此
消费者不能超过生产者生产者不能把消费者超过一个圈。
我们只需要在以下两种场景生产者和消费者会指向同一个位置
两种情况需要判断
1.全空
2.全满
资源的认识p——空间 c——数据
psem-space c :sem_data
要满足以上四点我们只需要用信号量去实现他会帮我们申请资源并对资源做管理我们只需要初始化好它、 值得一提的是RingQueue队列多生产多消费问题
单生产者单消费者RingQueue能不能不做修改就实现多生成多消费答案是不行 因为信号量是对资源进行分块管理一个线程只能访问某一个分块资源也就是说这个信号量保护的仅仅是空间资源和数据资源但是_p_pos和_c_pos他们没有被保护起来可能造成数据错乱的问题。
如何解决
加锁 为什么锁是加在申请信号量之后
申请信号量是原子性的是不需要被锁保护的锁维护的临界区越大效率其实越低如果加在申请信号量之前那么多消费者或多生产者在进入函数后就不能同时去申请信号量造成效率降低。