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

2023-11-03

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

生产者消费者问题

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

关于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.
在这里插入图片描述
总结
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 终端连接控制(stty的编写)

    终端连接控制 stty的编写 一 背景 文件与目录在之前已经学习过了 文件中包含着数据 这些数据可以被读出 写入 也可以用以操作 但文件不仅仅是计算机唯一的数据来源 计算机的数据还可以来自于许多的外部设备 比如扫描仪 照相机 鼠标等输入设备
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • 文件管理系统(操作系统)——9张思维导图

    文件管理系统 1 文件管理 1 1 一个文件的逻辑结构 比如一个文本txt文件 又或者Excel文件 在我们用户看来 它是长什么样的 这个就是逻辑结构 几个概念 逻辑结构 就是指在用户看来 单个文件内部的数据应该是如何组织起来的 物理结构
  • 小白学协程笔记2-c语言实现协程-2021-2-10

    文章目录 前言 一 c语言中协程切换方式 二 使用setjmp 和 longjmp实现协程切换 1 setjmp和longjmp函数简介 2 协程实现 三 使用switch case实现协程切换 1 switch case小技巧 2 协程实
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • 操作系统笔记六(文件管理)

    1 文件逻辑结构 1 1逻辑结构的文件类型 分类 有结构文件 例如 PNG文件 无结构文件 1 2顺序文件 1 3索引文件 2 辅存的存储空间分配 2 1分配方式 连续分配 直接分配连续的存储空间 链接分配 隐式链接 在盘块内指定下一个盘块
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • 使用inet_ntop转换IPv6地址时在macOS和linux上的行为不一样

    下面这段python代码在macOS和linux时运行的结果是不同的 import socket ip socket inet pton socket AF INET6 1 2 3 0 5 6 7 8 print socket inet n
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • Linux(13):例行性工作排程

    例行性工程 听谓的排程是将工作安排执行的流程之意 Linux 排程就是透过 crontab 与 at 这两个东西 两种工作排程的方式 一种是例行性的 就是每隔一定的周期要来办的事项 一种是突发性的 就是这次做完以后就没有的那一种 at at
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • 八股文打卡day20——操作系统(3)

    面试题 线程同步的方式有哪些 我的回答 多线程同时访问和修改某个数据的话 会造成数据的不一致和冲突问题 所以就需要线程同步 线程同步的方式有 1 互斥锁 互斥锁就是 当一个资源被访问和操作时 会对这个资源加锁 把这个资源锁定 其他线程不能对

随机推荐

  • 网络工程师必备知识点

    作为网络工程师 您将负责设计 部署和维护计算机网络系统 这包括构建 配置和管理网络设备 如交换机 路由器 防火墙等 并确保网络系统能够高效地运行 您需要了解计算机网络的各个层次 协议 标准和技术 包括TCP IP DNS HTTP SSL等
  • 大数据多样性体现在包括_对大数据时代的思考(一)

    科技是第一生产力 进入世纪的第一个20年以来 人们越来越多的将关注的领域集中在大数据 人工智能 云计算 物联网 移动互联网 GIS AR与VR 5G 区块链 数字化与智慧化等 尤其为最近的风口 ABC 笔者也一直在关注这方面的研究与学习 最
  • python爬虫爬小说网站涉及到(js加密,CSS加密)

    我是对于xxxx小说网进行爬取只讲思路不展示代码请见谅 一 涉及到的反爬 js加密 css加密 请求头中的User Agent以及 cookie 二 思路 1 对于js加密 对于有js加密信息 我们一般就是找到他加密的js 使用execjs
  • 面试进阶必问的Redis,看这篇就够了!

    出自 https github com CyC2018 CS Notes 一 概述 二 数据类型 STRING LIST SET HASH ZSET 三 数据结构 字典 跳跃表 四 使用场景 计数器 缓存 查找表 消息队列 会话缓存 分布式
  • 毕设—基于OpenCV的高动态范围图像渲染算法研究与实现(一)

    本论文只是一篇普通的本科论文 没有创新点 只是总结前人完成的理论知识 并用C 语言加以实现 本论文共实现了五种色调映射算法 基于对数变换的色调映射技术 基于直方图均衡化的色调映射技术 基于Retinex的色调映射技术 基于双边滤波的色调映射
  • js筛选并返回数组中的相同值

    可以使用 JavaScript 中的 filter 函数来筛选数组中的相同值 例如 要从数组 1 2 3 4 5 1 2 3 中筛选出所有的重复值 可以这样写 const numbers 1 2 3 4 5 1 2 3 const dupl
  • 中微区块链集团参加第二届中国高科技产业化高峰会议

    中微区块链集团参加第二届中国高科技产业化高峰会议 11月25日上午 素有科技界 达沃斯论坛 之称的第二届 中国高科技产业化高峰会议 在广州高新区开幕举行 本届大会的主题是 科技赋能 智汇湾区 产业生态 多名院士专家出席大会 就科技产业化热点
  • Windows使用技巧

    摘自 这些技巧让你windows用起来很爽 小工具 小技巧 删小广告 重装卸载残留 作者 丶PURSUING 发布时间 2021 03 12 16 09 17 网址 https blog csdn net weixin 44742824 a
  • Kubernetes(k8s)的基础概念

    目录 Kubernetes概述 什么是Kubernetes 为什么需要K8S K8S的特性 Kubernetes 集群架构与组件 K8S工作流程 Kubernetes的核心组件 Master组件 Kube apiserver Kube co
  • Spring Cloud学习笔记【分布式配置中心-Config】

    文章目录 SpringCloud Config概述 概述 传统方式弊端 主要功能 与GitHub整合配置 Config服务端配置与测试 服务端配置 即Gitee上的配置文件 Config Demo配置 Spring Cloud Config
  • Idea 全局替换指定字符

    最近使用idea开发 刚接触不久 然后碰到需要全局替换的时候 懵逼了 之前使用eclipse 直接Ctrl F 就可以操作了 现在使用idea 摁Ctrl F竟然只能搜 不能替换 尴尬的一匹 解决办法有两种 1 摁Ctrl F 搜索 再摁C
  • 【iOS】如何优雅快速的大量导入与展示系统照片与视频

    最近接了一个需求 要求增加一个相册导入图片 视频 的功能 具体要求有 1 导入速度要非常快 1000张图片需要控制在一分钟 需要复制到本地 2 可以无限制导入 导入数量需要支持10000 3 需要拿到图片的基本信息 包括位置 尺寸 大小 格
  • 高并发高可用之ElasticSearch

    目录 ES对比MySql数据库 Docker下安装ES和kibana 增删改查操作 高级检索Query DSL 映射 安装中文IK分词器 SpringBoot整合ES 实战应用 ES集群 ES里面的数据怎么保持与mysql实时同步 都存内存
  • 报错: ‘XXXX‘ is declared but its value is never read.Vetur(6133)

    引入的路径本没有问题 结果确报错 解决方法如下 1 在VScode工具的设置中找到设置 2 在搜索栏输入 vetur 并找到Vertur gt Validation Script 在比较靠下多滑动页面哦 3 最后关闭项目重新打开即可 报错消
  • 二叉树前序,中序以及后序的非递归算法实现(外加层序)

    二叉树前序 中序以及后序的非递归算法实现 外加层序 最近在学数据结构里面的二叉树 就把三个遍历的非递归算法以及层序遍历写了一下hhh 感觉就是用栈模拟了一下递归算法 其实三种遍历的方法大体相似 主要就是在访问节点值的时候对代码进行了部分改动
  • 代码质量度量标准_Google研发度量改进实践

    Google改进过程 本文案例源自 Measuring Engineering Productivity 作者 Ciera Jaspen Google 前言 随着敏捷开发 DevOps等方法论在软件行业持续运用 各种用来提升组织研发效率和产
  • Jmeter性能测试3——JMETER-脚本优化

    断言 作用 用于检查检测在测试中得到的响应结果是否符合预期 用以保证性能测试过程中数据交互与预期一致 主要是用来调试 真正执行压力测试时候 断言禁用 目的 在request 请求 返回层面加一层判断机制 实现的过程 在请求下添加断言 请求不
  • 如何解决python安装模块是出现的 error: Unable to find vcvarsall.bat

    看了一圈网上的 觉得知乎里面的答案是最好的 我觉得大部分问题在于python版本和vs版本不配对的问题 例如 python2 7会默认配对msvs2008 python3 4 和3 5是默认配对msvs2010 所以我电脑上python3
  • 【软件测试常见Bug清单】

    软件测试中 bug的类型有很多种 比如 代码错误 界面优化 设计缺陷 需求补充和用户体验等 一般情况下 需求补充和设计缺陷比较好区分 但是代码错误 界面优化和用户体验区分不是很明显 下面我们就来说说这三者 顺带整理一些常见的这些类型的bug
  • 【操作系统】王道考研 p22-26 生产者消费者问题、多生产者多消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题

    生产者消费者问题 多生产者多消费者问题 吸烟者问题 读者写者问题 哲学家进餐问题 生产者消费者问题 有同步和互斥 同步 缓冲区没满才能放产品 缓冲区不空才能取产品 互斥 各进程互斥访问 关于PV P是消耗 V是释放 或理解为P是进 V是出