生产者消费者问题
多生产者多消费者问题
吸烟者问题
读者写者问题
哲学家进餐问题

生产者消费者问题

有同步和互斥:
同步:缓冲区没满才能放产品,缓冲区不空才能取产品。
互斥:各进程互斥访问。

关于PV:P是消耗,V是释放(或理解为P是进,V是出)
生产者P一个空闲缓冲区,V一个产品。
消费者P一个产品,V一个空闲缓冲区。

mutex是一个互斥信号量,实现对缓冲区的互斥访问。 ==
比如:对producer,它在把产品放入缓冲区前要P(mutex),表示“我要使用缓冲区”,(因为是互斥的,P了之后如果不V就不会有进程再来访问缓冲区),放完后再V(mutex),表示“我用完了。”这里就实现了互斥==。

empty和full是同步信号量,empty表示空闲缓冲区数量,full表示产品数量。
对于producer,生产一个产品要P(empty),表示用了一个空闲缓冲区,生产完即V(full),产生了一个产品。
对于consumer,消耗一个产品P(full)后就释放了一个缓冲区V(empty)。


思考:能否改变相邻PV操作的顺序?
显然不能,可能会死锁,会造成进程之间的并发度降低。

对于producer:
P(mutex)就像是上锁,如果没有V(mutex),就没有进程可以访问缓冲区。但如果先P(mutex),上锁了,然后发现无法执行P(empty),即没有空闲缓冲区了,那就停在这里了。
consumer也同理。

总结
互斥的是缓冲区,同步的是空闲缓冲区资源和产品。
易错:
对于producer:先P(empty),再P(mutex),再V(mutex),再V(full).
对于consumer:先P(full),再P(mutex),再V(mutex),再V(empty).

可以这样理解:mutex是相当于对缓冲区(临界资源)的上锁,锁完后要马上释放,所以mutex的PV操作一定在最里层。

多生产者多消费者问题


这里:不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象。
原因是:本题的缓冲区大小只有1,在任何时刻,apple,orange,plate三个同步信号量中最多只有一个是1(有一个苹果,有一个橘子,或空位是1)。因此任何时候,最多只有一个进程的P操作不会被阻塞,并顺利进入临界区。
简而言之,当一个进程可以运行时,其他进程不满足运行的条件,所以不会出现多个进程同时访问盘子的情况,就不需要互斥变量了。

但是,如果缓冲区大小为2,那么父亲和母亲进程都满足条件,如果没有mutex,就会两个进程同时访问缓冲区。所以,需要互斥信号量mutex。


总结
如果缓冲区大小为1,有可能不用互斥信号量。
所以还是都用互斥信号量稳一点。

事件前后关系。
如这道题:放水果前的情况是盘子为空,放水果后是盘子为满。则就是一个同步信号量。

吸烟者问题


供应者供应任意一个组合(V),然后相应的吸烟者把它拿了(P)。
所以先V后P。

对于供应者来说:
轮流提供三种组合,提供就是V(offer),提供完其实就是P(finish),表示桌子上已经放了东西。
对于吸烟者来说,拿东西P(offer),然后就V(finish),因为拿完东西桌子就已经空了。

总结

读者写者问题

写进程和读进程(或写进程)同时运行会产生错误。
因此要求:可以同时读、只能一个写、写完前不能有其他进程访问。

处理问题的方法在最后一段:

writer的P(rw)和V(rw)相当于写文件前后的上锁和解锁。
reader中的mutex是因为要互斥地访问count。
reader中的P(rw)和V(rw)相当于读文件的上锁和解锁:只有还有文件要读就不解锁。
因此写进程可能饥饿。

这种算法也被称为==读写公平法。==不会让写进程饥饿。

看这里知道为什么不会让写进程饥饿
此图来自上面的链接:
增加的P(w)和V(w)有交替唤醒的感觉。


总结

哲学家进餐问题

视频里提出了三种方法,但是代码只有一种。
这里看完整的代码

当所有哲学家都拿起左边的筷子,那么无法都拿起右边的筷子,会死锁。

三种解决方法:

3.仅当一个哲学家左右两只筷子都可用时才允许他抓起筷子。

互斥地拿筷子:
这种方法对应上面链接中的解决方法2.

总结

【操作系统】王道考研 p22-26 生产者消费者问题、多生产者多消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题相关推荐

  1. 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )

    目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? ​2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制  个人 ...

  2. 操作系统王道考研复习——第一章(计算机系统概述)

    操作系统王道考研复习--第一章(计算机系统概述) 计算机系统概述 1.1操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 1. 并发 2. 共享 3. 虚拟 4. 异步 1. ...

  3. 操作系统 --经典同步问题之吸烟者问题读者-写者问题(七)

    一.吸烟者问题 1.问题描述 假设一个系统有三个抽烟者进程和一个供应者进程.每个抽烟者不停地卷烟并抽掉,但是要卷起并抽掉一支烟,需要三种材料:烟草.纸.胶水.三个抽烟者中,每一个第一个拥有烟草,第二个 ...

  4. 22考研计算机专业课——操作系统【❤️考研复习指导❤️】

    操作系统这门课和其他专业课不同,它很抽象,偏重于概念,我在第一轮复习完后对它很多点都没有理解,比如段页式分配和索引块,直到第二轮和第三轮之后我才彻底理解清楚,做到各种题目也迎刃而解.只要原理弄清楚了, ...

  5. 操作系统——呕心沥血长篇总结(王道考研)

    操作系统 操作系统的概念.功能和目标 定义 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基 ...

  6. 操作系统:读者写者问题

    操作系统:读者写者问题 问题: 一.读者-写者问题: 读者优先 二.读者-写者问题:写进程优先 三.读者写者问题的应用---独木桥问题 类型1.一次只能过一辆车 类型2.一次能过多辆车 四.总结 附代 ...

  7. 操作系统学习笔记 第二章:进程管理(王道考研)

    本文章基于 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系统概述 ...

  8. 【专栏必读】王道考研408操作系统万字笔记(从学生角度辅助大家理解):各章节导航及思维导图

    其他科目导航 [专栏必读]王道考研408计算机组成原理万字笔记(从学生角度辅助大家理解):各章节导航及思维导图 [专栏必读]王道考研408数据结构万字笔记(有了它不需要你再做笔记了):各章节内容概述导 ...

  9. (王道408考研操作系统)第二章进程管理-第三节10:经典同步问题之哲学家进餐问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 (王道408 ...

  10. 王道考研 操作系统知识点汇总(目录+思维导图)

    第一章 计算机系统概述 文章目录 前言 1.1.1 操作系统的概念.功能和目标 思维导图 本节内容 1.1.2操作系统的特征 思维导图 本节内容 1.1.3操作系统的发展与分类 思维导图 本节内容 1 ...

最新文章

  1. [Beta]第二次 Scrum Meeting
  2. Access转Sql Server问题
  3. 8、如何将SQL语句映射为文件操作
  4. 项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!
  5. 远程服务器如何创建分支,git如何远程创建分支
  6. 深入浅出Java回调机制
  7. A股开盘:深证区块链50指数涨0.16%,顺利办跌停
  8. mysql 种子表_mysql之3种子查询
  9. 适配器模式 - 上厕所案例
  10. epoll内核源码详解+自己总结的流程
  11. c++坦克大战 代码免费复制(附源码)
  12. 支付宝直付通怎么签约教程详解,支付宝直付通开通需要什么条件!
  13. 精忠报国用计算机弹,同人精忠报国岳飞传
  14. 随想·手中没有红玫瑰
  15. 对车辆路试数据集mtcars进一步分析_【案例】图解电磁阀及其故障诊断分析
  16. 又一微信自动化框架wxauto横空出世了!
  17. Java程序员是考研还是毕业就就业?
  18. 8个强大的UI设计工具-设计师利器
  19. nginx:代理服务器(涉及upstream)的例子
  20. 好书推荐--Linux之父Linus的自传《Just for Fun》

热门文章

  1. jsdroid 教程_电气设计编程视频教程,涉及PLC、电气绘图、仿真等共400多份资料...
  2. App发送短信验证码实现
  3. 双链路是什么意思_双链路DVI是什么意思 工作原理是什么
  4. flash读取程序 msp430_MSP430内部FLASH详细操作
  5. sap 双计量单位_采购订单单位与基本计量单位不一致问题案例
  6. java读取pdf文档
  7. vue移动端日历显示查看每日详情列表
  8. 大规模定制的实现方法
  9. 学会可视化大屏布局技巧,让领导都赞不绝口
  10. 计算日期在当月是第几周-【自然周(每月第一个周一为该月第一周)做法以及1号为第一周做法】