《OS:PV操作 - 读者写者问题》
经典同步问题
读者写者问题
背景:有多个读者,也有多个写者。要保证其互斥性。要求应用对应的PV操作实现。
定义:
- P,V操作均为原子操作
- 原子操作是在执行的过程中,要么全做,要么全不做,不可被CPU打断
- P操作:简单说就是对一个信号量进行减一,如果小于零,表示当前无资源可用。等待
- V操作:简单说就是对一个信号量进行加一。
- 信号量:一定程度上表征资源(不可抢占)的数目。
假设题目:
有多个人正在写文件,而在同一个系统给下有多个用户在读文件。试用PV操作模拟,并保证之间的互斥性。
注:与上篇文章生产者消费者有不同,因为读者可以同时进入临界区。换句话说:
如果有写者,那就不允许有其他的写者与读者。
但是如果有读者,那么只允许没有写者。
先亮代码
因为有两种情况,所以需要两个信号量,一个为二值信号量,一个为多值信号量
初始化:
writeMutex = 0readerNumber = 0//当前系统中读者的个数
Writer(){repeat:P(writeMutex);写操作V(writeMutex);
}
Reader(){repeat:if(readerNumber==0)P(writeMutex);readerNumber++;读操作readerNumber--;if(readerNumber==0)V(writeMutex);
}
为了优化,避免出现++ --的时候出现切换,需要额外定义一个信号量,去保证这个++ – 的过程是互斥的。
即:
Reader(){repeat:P(cntMutex);if(readerNumber==0)P(writeMutex);readerNumber++;V(cntMutex);读操作P(cntMutex);readerNumber--;if(readerNumber==0)V(writeMutex);V(cntMutex);
}
解释:
在读者优先的读者写者问题的时候。我们需要让写者唯一进入,让读者不互斥进入。
相比于生产者消费者问题上,我们就不是单纯的通过一个锁控制进入互斥就可以了。
这里设计的比较妙的是
if(readerNumber==0)P(writeMutex);
这里设计是跟下面释放锁所对应的。这里判断的是,如果当前是第一个读者用户,则直接让其封上对外开放写的权限。
那么如果不是第一个读者呢?那我们也不必担心,因为已经保证锁被之前的读进程拿到了。所以我们不需要担心会有写者进来。相反,如果他是第一个读者,但是此时锁已经被分配出去了。那么第一个reader就会卡在P(writeMutex)这个操作,也进不去,直到写者退出。
《OS:PV操作 - 读者写者问题》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- 16-flutter-Swiper 插件的使用
- name 'false' is not defined
- python如何编程-终于发现怎么自学python编程
- 经典算法学习——冒泡排序
- 7.Windows线程切换_时钟中断切换
- Apache2+PHP5不能加载Zend Optimizer的问题
- Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (ISO)
- 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)
- spring 使用XML配置开发Spring AOP
- 响应服务器auth first,asp.net mvc发送QQ邮件提示 命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !...
- 英特尔傲腾技术:部署更简单,内存提升游戏性能
- windows 下安装redis
- 传智播客风清扬视频------异常简述
- Elasticsearch Nested类型深入详解
- 100层楼,2个鸡蛋,最少要几次才能测试出鸡蛋能承受的最大楼层?
- 人类计划软件测试,人类分裂了16种人格,测测你是哪一种?
- 程序员经常看的开源月刊《HelloGitHub》第 56 期
- props的基本使用和特点
- QQ、微信、新浪 利用refresh_token重新登录
- 网站怎么赚钱? 靠流量赚钱吗? 广告吗? 建什么网站赚钱