经典同步问题

读者写者问题

背景:有多个读者,也有多个写者。要保证其互斥性。要求应用对应的PV操作实现。

定义:

  1. P,V操作均为原子操作
  2. 原子操作是在执行的过程中,要么全做,要么全不做,不可被CPU打断
  3. P操作:简单说就是对一个信号量进行减一,如果小于零,表示当前无资源可用。等待
  4. V操作:简单说就是对一个信号量进行加一。
  5. 信号量:一定程度上表征资源(不可抢占)的数目。

假设题目:

有多个人正在写文件,而在同一个系统给下有多个用户在读文件。试用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操作 - 读者写者问题》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 16-flutter-Swiper 插件的使用
  2. name 'false' is not defined
  3. python如何编程-终于发现怎么自学python编程
  4. 经典算法学习——冒泡排序
  5. 7.Windows线程切换_时钟中断切换
  6. Apache2+PHP5不能加载Zend Optimizer的问题
  7. Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (ISO)
  8. 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)
  9. spring 使用XML配置开发Spring AOP
  10. 响应服务器auth first,asp.net mvc发送QQ邮件提示 命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !...
  11. 英特尔傲腾技术:部署更简单,内存提升游戏性能
  12. windows 下安装redis
  13. 传智播客风清扬视频------异常简述
  14. Elasticsearch Nested类型深入详解
  15. 100层楼,2个鸡蛋,最少要几次才能测试出鸡蛋能承受的最大楼层?
  16. 人类计划软件测试,人类分裂了16种人格,测测你是哪一种?
  17. 程序员经常看的开源月刊《HelloGitHub》第 56 期
  18. props的基本使用和特点
  19. QQ、微信、新浪 利用refresh_token重新登录
  20. 网站怎么赚钱? 靠流量赚钱吗? 广告吗? 建什么网站赚钱

热门文章

  1. Spring AOP 切点详解
  2. 联想电脑 linux bios设置,联想台式电脑bios设置图解教程
  3. 【亚马逊运营】借助Coupon流量入口,让你的爆款锦上添花!
  4. .net 操作 excel
  5. 集成电路的逻辑功能测试
  6. 凤阳中学2021高考成绩查询,2021“我为天职师大代言”|走进安徽凤阳中学
  7. 在Windows中搭建iPhone开发环境
  8. 企业多层分布式应用架构
  9. 考研之数据结构常见代码题01
  10. 使用a标签的href来实现点击手机号拨打电话