计算机操作系统学习之多生产者多消费者问题

2023-05-16

文章目录

  • 一.问题描述
  • 二.问题分析
    • 1.关系分析
    • 2.整理思路
    • 3.设置信号量
    • 4.具体实现
    • 5.补充

一.问题描述

  • 有一个盘子,每次只能放一个水果
  • 父亲专门往盘子里放苹果,母亲专门往盘子里放橘子
  • 女儿专门等着吃盘子里的苹果,儿子专门等着吃盘子里的橘子
  • 只有盘子为空时,父亲/母亲才可向盘子里放入一个水果
  • 只有盘子里有自己需要的水果时,女儿/儿子才会从盘子里拿水果
  • 这就是多生产者多消费者问题,所谓的“多”其实是多类型:即不同类型的生产者和不同类型的消费者
    在这里插入图片描述

二.问题分析

在这个题目中,父亲和母亲其实就是两个生产者进程,儿子和女儿就是两个消费者进程,盘子其实就是一个大小为1的缓冲区

1.关系分析

找出题目中描述的各个进程,分析他们之间的互斥和同步关系

  • 互斥关系:对缓冲区(盘子)的访问要互斥的进行
  • 同步关系1:父亲将苹果放入盘子之后,女儿才能取苹果
  • 同步关系2:母亲将橘子放入盘子之后,儿子才能取橘子
  • 同步关系3:只有盘子为空时,父亲/母亲才能放入水果
  • “盘子为空”这个事件可以由儿子/女儿触发,事件发生后才允许父亲/母亲放水果
    在这里插入图片描述

2.整理思路

根据各进程的操作流程确定P、V操作的大致执行顺序

  • 互斥:在访问临界区前后加P、V操作
  • 同步:在上面分析的各个同步关系中:前操作之后加V操作,后操作之前加P操作
    在这里插入图片描述

3.设置信号量

  • 设置需要的信号量,并根据题目设置初值
  • 互斥信号量初值一般为1
  • 同步信号量初值根据对应资源的初始值确定

在这里插入图片描述

  • mutex=1:实现互斥访问缓冲区
  • apple=0:盘子中有几个苹果
  • orange=0:盘子中有几个橘子
  • plate=1:盘子中此时还能放几个水果

4.具体实现

在这里插入图片描述

  • 父亲进程:先准备一个苹果,在放入盘子之前,先检查盘子中是否有水果(对信号量mutex执行P操作),如果此时盘子中没有水果,那么父亲就将苹果放入盘子,并且对信号量apple执行V操作,表示此时盘子中有一个苹果。母亲进程的执行与之类似。
  • 女儿进程:先检查盘子中是否有苹果(对信号量apple执行P操作),如果有则从盘子中取出苹果,并且执行V(plate),表示此时盘子空了,可以继续放水果了。儿子进程的执行与之类似。

5.补充

在对同步关系(只有盘子为空时,父亲/母亲才能放入水果)的处理中,如果从单个进程行为的前后关系来考虑,会有以下结论:

  • 如果盘子内装有苹果,那么一定要女儿取走苹果,父亲/母亲才能再放入水果
  • 如果盘子内装有橘子,那么一定要儿子取走橘子,父亲/母亲才能再放入水果
  • 那么就会产生四对一前一后的关系,需要四个信号量来实现:
    在这里插入图片描述

但如果我们是从某个事件发生前后的角度考虑,盘子变空事件—>放入水果事件,盘子变空可以由儿子/女儿触发,放入水果可以由父亲/母亲执行,这样只用一个信号量就可以解决问题
在这里插入图片描述

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

计算机操作系统学习之多生产者多消费者问题 的相关文章

随机推荐

  • BARF: Bundle-Adjusting Neural Radiance Fields论文阅读

    摘要 神经辐射场 NeRF 可以合成真实世界场景的全新视角的照片 xff0c 其性能优异 xff0c 因此在计算机视觉领域引起较大的兴趣 NeRF的一个限制条件是需要准确相机位姿 本文提出了集束调整神经辐射场 BARF xff0c 可以用不
  • 自动驾驶高精定位

    定位是高等级自动驾驶的基础 xff0c 但在高速NOA和城区NOA等场景中 xff0c 如何能够稳定地在各种工况下实现高精度定位将是个难题 一个常见的问题是 xff1a 高速NOA 城区NOA功能需要实现多高精度的定位 xff1f 需要多高
  • 高精度组合导航里的松耦合、紧耦合、深耦合

    高精度定位 xff0c 是自动驾驶车辆一切丰满理想实现的前提 它用于判断自动驾驶功能是否处于可激活的设计运行条件内 xff1b 它用于支撑自动驾驶车辆的全局路径规划 xff1b 它用于辅助自动驾驶车辆的变道 避障策略 不同的场景特点 不同的
  • 超像素分割

    1 超像素 超像素是把一张图片中具有相似特征的像素进行聚类 xff0c 形成一个更具有代表性的大 像素 这个新的像素可以作为其他图像处理算法的基本单位 xff0c 可以减低图像的维度和异常像素点 目前常用的超像素分割算法有SLIC SEED
  • Numpy使用问题汇总

    1 批量操作 1 1 现象 import numpy as np vec 61 np zeros 10 int indices 61 np array 0 0 vec indices 43 61 1 print vec 上面代码的输出不是
  • K-means聚类算法

    K means 是我们最常用的基于欧式距离的聚类算法 xff0c 其认为两个目标的距离越近 xff0c 相似度越大 本文大致思路为 xff1a 先介绍经典的牧师 村名模型来引入 K means 算法 xff0c 然后介绍算法步骤和时间复杂度
  • 自组织映射(Self-organizing map, SOM)

    1 算法原理 自组织映射 Self organizing map SOM 通过学习输入空间中的数据 xff0c 生成一个低维 离散的映射 Map xff0c 从某种程度上也可看成一种降维算法 SOM是一种无监督的人工神经网络 不同于一般神经
  • 怎么将数据存入session

    怎么将数据存入session 默认数据都是存入request 需要自己设置存入session 1 方式1 原生session代码 64 RequestMapping 34 selectUser 34 public String select
  • Octree(八叉树)

    1 算法原理 八叉树 xff08 Octree xff09 是一种用于描述三维空间的树状数据结构 八叉树的每个节点表示一个正方体的体积元素 xff0c 每个节点有八个子节点 xff0c 将八个子节点所表示的体积元素加在一起就等于父节点的体积
  • DBSCAN聚类算法

    DBSCAN是一种非常著名的基于密度的聚类算法 其英文全称是 Density Based Spatial Clustering of Applications with Noise xff0c 意即 xff1a 一种基于密度 xff0c 对
  • 搭建网盘工具kk

    1 主要功能 支持用作简单文件列表 xff0c 无需数据库 xff0c 无用户管理 xff0c 分享等功能支持基本网盘功能 xff0c 需要安装MongoDB及Redis xff0c 支持用户注册 xff0c 文件分享 xff0c 用户目录
  • numpy中transpose详解

    transpose用于numpy中高维度数组的轴变换 xff0c 在二维情况下就是通常说的转置 该方法很不好理解 xff0c 本文详细介绍该方法 该方法有两个实现 xff0c 分别是numpy ndarray transpose和numpy
  • Python压缩文件

    1 标准库中的压缩模块 在我们常用的系统windows和Linux系统中有很多支持的压缩包格式 xff0c 包括但不限于以下种类 xff1a rar zip tar xff0c 以下的标准库的作用就是用于压缩解压缩其中一些格式的压缩包 2
  • LE-VINS:固态激光雷达增强的视觉惯性导航系统

    在光照剧烈变化 动态物体 弱纹理等视觉退化场景 xff0c 视觉路标点的深度估计难度急剧增加 xff0c 导致视觉惯性导航系统 VINS 的精度和鲁棒性恶化 采用非重复扫描原理的固态激光雷达 xff0c 为解决视觉路标点深度估计问题带来便利
  • Gradio介绍

    Gradio App 就是给 AI 算法工程师训练的模型赋予分享给大众的能力 从技术侧拆分 xff0c 由三个部分组成 xff1a 前端页面 43 后端接口 43 AI算法模型推理 Gradio 做了一件事情 xff0c 就是将这三个部分封
  • GitHub Copilot 快速入门

    GitHub Copilot 是 AI 结对程序员 可以使用 GitHub Copilot 在编辑器中获取整行或整个函数的建议 1 简介 让我们首先了解一些关于 GitHub Copilot 的内容 这是 GitHub 和 OpenAI 的
  • 电池连接接触电阻的优化研究

    金属与金属接触处的接触电阻主要受以下因素影响 xff1a 表面结构机械负载 表面结构可以通过表面平整度 表面氧化和吸水性进一步描述 电池组中的这些接头将采用焊接或螺栓连接方式 最初最容易想到的是螺栓母线接头 螺栓扭矩可用于估算力 xff0c
  • (二)CAS统一认证——自定义登录(数据库)

    简介 关于CAS的登录流程 xff0c overlay中只是一个简单的用户名密码登录 casuser Mellon xff0c 这个肯定是不能满足日常生产的需求的 xff0c 在日常开发中遇到最通用的情况就是从数据库中进行身份认证密码的比对
  • springcloud

    一 什么是SpringCloud xff1f Author xff1a 呆萌老师 QQ 2398779723 微信 it daimeng Spring Cloud是一个微服务框架 xff0c 相比Dubbo等RPC框架 Spring Clo
  • 计算机操作系统学习之多生产者多消费者问题

    文章目录 一 问题描述二 问题分析1 关系分析2 整理思路3 设置信号量4 具体实现5 补充 一 问题描述 有一个盘子 xff0c 每次只能放一个水果父亲专门往盘子里放苹果 xff0c 母亲专门往盘子里放橘子女儿专门等着吃盘子里的苹果 xf