操作系统(二十三)生产者消费者问题

2023-05-16

2.3.6 生产者消费者问题

  生产者消费者问题(The proceducer-consumer problem)是一个经典的进程同步的问题,问题是这样描述的:在操作系统中有一组生产者进程一组消费者进程,生产者每次会生产一件产品并放入缓冲区,消费者每次从缓冲区取出一件产品并使用。生产者、消费者共享一个初始为空、大小为n的缓冲区。只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。缓冲区是临界资源,各进程必须互斥地访问。  

  从上面这段话中我们可以总结出一个同步问题以及一个互斥问题:生产者只有生产了产品放入缓冲区之后消费者才能使用(同步问题),同时缓冲区只能由一种进程进行访问(互斥问题)。对于同步问题可以描述为,检查缓冲区没满之后生产者放入产品;检查缓冲区不空之后消费者才可以取用产品。下面开始对问题进行描述:

semaphore mutex = 1; //互斥信号量,实现对缓冲区的互斥访问
semaphore empty = n; //同步信号量,表示空闲缓冲区的数量
semaphore full = 0; //同步信号量,表示产品的数量,也即非空缓冲区的数量

producer (){
    while(1){
        生产一个产品;
        P(empty);
        P(mutex);
        把产品放入缓冲区;
        V(mutex);
        V(full);
    }
}

consumer (){
    while(1){
        P(full);
        P(mutex);
        取走一个产品;
        V(mutex);
        V(empty);
        使用产品;
    }
}

  不知道大家有没有发现,两个进程发生联系的桥梁一定是他们的同步信号量,换句话说,同步信号量的P与V必须出现在两个不同的进程中。并且实现互斥的P操作一定要在实现同步的P操作之后。V操作不会导致进程阻塞,因此两个V操作顺序可以交换

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

操作系统(二十三)生产者消费者问题 的相关文章

  • 【Linux】服务器命令终端美化优化

    一 背景 有些服务器命令行很丑 xff0c 全是白色 xff0c 不光是不好看 xff0c 而且影响工作效率 xff0c 所以把它美化一下 修改完后效果 xff1a 二 步骤 0 安装 Bash it 之前 xff0c 首先需要确认的是系统
  • 了解GCD

    目录 一 GCD简介 二 GCD好处 三 GCD任务和队列 1 任务 同步执行 xff08 sync xff09 xff1a 异步执行 xff08 async xff09 xff1a 2 队列 串行队列 xff08 Serial Dispa
  • 解决vmware虚拟机环境下CentOs8 /dev/mapper/cl-root空间不足问题-使用gparted工具给磁盘分区扩容

    问题如图 xff1a 首先用命令df h查看文件系统的磁盘空间占用情况 dev mapper cl root空间用了97 xff0c 扩容它 xff01 1 首先 xff0c 关闭虚拟机 xff0c 编辑虚拟机 扩展 xff0c 我扩展了2
  • docker中 运行httpd

    1 获取 httpd 镜像 docker pull httpd 2 运行httpd 81 80 81 是docker映射的 httpd 端口 xff0c 80 是httpd设置的默认端口 进入docker中运行的httpd容器 目录实际跟服
  • openssl:Can‘t load /home/test/.rnd into RNG

    Can 39 t load home test rnd into RNG 140409534742976 error 2406F079 random number generator RAND load file Cannot open f
  • 线程同步的方式有哪些(简单易懂)

    什么是线程同步 线程同步 xff1a 这里的同步并非同时运行的意思 xff0c 而是指多线程通过特定的设置来控制线程之间的执行顺序 xff0c 如果没有同步 xff0c 那线程之间是各自运行各自的 xff01 特殊的线程同步 线程互斥可以看
  • Blazo身份认证授权示例以及如何对接统一登录平台

    Blazo的身份认证授权示例以及如何对接统一登录平台 在阅读本文之前 xff0c 希望您已经对ASP NET Core或者Web应用的身份认证机制有所了解 本文主要讲述Blazor WebAssembly模式下的身份认证和授权方法 xff0
  • Blazor页面元素授权——AuthorizeView 组件的使用

    Blazor页面元素授权 AuthorizeView 组件的使用 上篇博客我们说到了blazor的身份认证的实现 xff0c 对于AuthorizeView 组件来说 xff0c 可以通过级联参数来获取包含了用户信息的Authenticat
  • 面试经历---广州YY(欢聚时代)

    上周去YY xff08 欢聚时代 xff09 面试JAVA工程师 xff0c 现在回忆一下当时的面试过程 xff0c 面试问的问题有 xff1a 1 常用的集合类 HashMap HashTable ArrayList LinkedList
  • Linux Kernel ccflags/Android 12 GKI

    ccflags Makefile笔记 外部模块头文件的检索 当编译的目标模块依赖多个头文件时 xff0c kbuild对头文件的搜索位置有这样的规定 xff1a 1 直接放置在 Makefile 同在的目录下 xff0c 在编译时当前目录会
  • Java之反射

    目录 1 什么是反射机制 2 反射机制有什么用 3 Class类对象的三种实例化模式 1 getClass 方法 xff1a 2 类 class 3 使用Class类提供的方法 4 通过反射实例化对象 5 反射主要使用的种类 5 1Clas
  • Win10服务器配置环境变量 | import _ssl # if we can‘t import it, let the error propagate ImportError: DLL load

    起因是我拿到了学校的算力平台的账号 xff0c 登录后发现桌面上只有软件和文件夹 xff0c C盘文件根本就看不见 xff0c cmd也无法打开 xff0c 但是我又需要搭建自己的环境 我还使用Anaconda安装了python3 7 xf
  • arch linux安装

    arch linux安装 IOS制作开始安装联网分区开始安装 系统初始化grub添加window10引导安装后的配置更改国内源 问题总结体眠后不能唤醒的问题 总结 IOS制作 开始安装 联网 可以先通过ip link命令查看网卡状态 spa
  • mysql无法启动10061的错误!!!

    昨天晚上打开java项目准备联系几个功能 linux里面启动成功 tomcat也运行了 正在享受这个过程的时候 结果mysql显示cant connect localhost 10061的错误 瞬间一盆冷水搞得心情无比低落 之前遇见过一次这
  • Ubuntu 下忘记用户名和登录密码的解决方法(已经实践过,踩过坑)

    1 首先重启 长按 shift 键 xff08 多次连击esc也可以 xff09 上下箭头选择Advanced options for Ubuntu xff0c enter键进入 2 选择后缀带 xff08 recovery mode xf
  • Unity+Android GET和POST方式的简单实现API请求(人像动漫化)

    Unity与Android的简单交互 xff0c Unity打开Android相册并调用 前端时间本想着去弄个小工具 xff0c 就是图文生成视频 xff0c 可是这个的API接口的调用的测试权限死活申请不下来 xff0c 只能放弃 xff
  • 手写生产者/消费者模式(三种方式)

    1 生产者 消费者模式介绍 这种模式满足三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 缓冲区满时 xff0c 生产者线程阻塞 xff0c 进入等待
  • jar包完全解读

    本文抄自 xff1a jar包的一些事儿 前言 xff1a 作为java程序员 xff0c 日常工作就是打jar包 xff0c 可是对jar包的了解有多少呢 xff1f 一 什么是jar包 jar包就是 Java Archive File
  • 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)

    YY欢聚时代一年多前去面试过一次 xff0c 当时鄙视了 xff0c 在现在的公司呆了1年半了 xff0c 感觉做得很不爽 xff0c 而且薪资又不满意 xff0c 所以想找个新工作 xff0c 就想去YY面试 下面将两次YY面试的经历写出
  • jenkins下载安装及环境搭建

    文章目录 jenkins下载首次启动jenkins环境配置 jenkins下载 jenkins官网下载 xff0c 输入jenkins io xff0c 出现如下界面 xff1a 点击下载 xff0c 往下滑 xff1a 选择这个war包下

随机推荐

  • Testng学习笔记(一)

    目录 TestNg简介1 TestNG使用流程1 1TestNG安装及使用1 2创建maven项目 xff0c 进行POM配置1 3 创建Test类1 4添加测试方法 2 TestNG常用注解及生命周期2 1常用注解2 2TestNG注解的
  • (史上最详细的解释看过来)深入理解函数栈帧

    函数的调用过程 xff08 栈帧 xff09 话说 xff0c 什么是函数栈帧 xff1f 我之前也是一脸懵逼的 xff08 xff09 xff0c 举个栗子 xff0c 先看一段简单的代码 xff1a span class token m
  • main函数参数及可变参数列表解析

    main函数的参数解析 平时写main函数大多都是int main xff0c 然后误以为main函数是没有参数的 xff0c 但在有些书上又看到main括号里有三个不怎么看的懂的参数 xff0c 其实仔细研究就会发现 xff0c main
  • 给定一棵二叉树,判断它是否是镜像对称的

    给定一个二叉树 xff0c 检查它是否是镜像对称的 在这里先解释一下镜像对称的概念 xff0c 顾名思义 xff0c 就像人站在镜子前面面对自己一样 xff0c 看到的一切都是对称的 镜中的反射与现实中的人具有相同的头部 xff0c 但反射
  • 判断一棵二叉树是否是平衡二叉树

    我们先来整理一下什么是平衡二叉树 xff1f 满足以下两点的就是平衡二叉树 xff1a 1 左右子树的高度差不能超过1 2 左右子树也是平衡二叉树 需要注意的是空树也是平衡二叉树 例如下面这棵树就不是平衡二叉树 因为对于B来说左右子树高度超
  • Fiddler实现手机抓包入门配置

    emmm 在此之前我也只是听过抓包抓包 xff0c 但是没有真正的接触到 xff0c Fiddler是一款很强大的抓包工具了 xff0c 但是一开始很多人可能会想我一样走上歧途 xff0c 所以在此总结一下 xff0c 希望看到的朋友少走弯
  • Idea使用Maven连接MySQL数据库

    连接MySQL数据库的步骤 xff1a 1 添加数据库 2 填写连接信息如图 3 填写连接信息完之后 xff0c 需要记一下jar包的位置 xff0c 用于添加jar包 4 显示jar包信息 5 添加文件夹命名java xff0c 并将其设
  • mybatis generator 生成中文字段注释

    首先 xff0c 试了好几次 xff0c 重写 DefaultCommentGenerator xff0c 创建MyCommentGenerator类实现CommentGenerator接口 xff0c 都是按照网上的方案来的 xff0c
  • org/apache/velocity/context/Context

    mybatisplus generator AutoGenerator 生成文件时报错如下 xff1a 请输入表名 xff1a alarm 14 38 28 569 main DEBUG com baomidou mybatisplus g
  • NVIDIA开源NeMo,CUDA,pytorch安装使用过程踩坑总结

    说明 Nemo cpu版本直接看文章最后一部分 xff08 linux版本的 xff09 xff0c windows下安装的话要先安装CUDA来支持GPU xff0c 在安装pytorch 在安装nemo 但是还是出问题了 xff0c 不建
  • 网络url转文件

    首先是获取springboot resource下面的文件 String fileUrl 61 ResourceUtils getURL 34 classpath 34 getPath 43 34 test txt 34 File file
  • ByteBuffer和String互转

    Charset charset 61 StandardCharsets UTF 8 String str 61 34 kj你好呀 kjlkjlkjlk 34 ByteBuffer buffer 61 ByteBuffer allocate
  • @Test单元测试注入bean 3种方式

    1 64 ContextConfiguration 64 ContextConfiguration Spring整合JUnit4测试时 xff0c 使用注解引入多个配置文件 64 RunWith SpringJUnit4ClassRunne
  • java 导出word

    目前来看 xff0c java导出word大致有6种解决方案 xff1a 1 xff1a Jacob是Java COM Bridge的缩写 xff0c 使用Jacob自带的DLL动态链接库 xff0c 并通过JNI的方式实现了在Java平台
  • JAVA visualVM 查看堆栈分配

    由于在做nlp xff0c 用到standFord nlp xff0c 堆栈分配总是一处 xff0c 所以需要这个 xff0c 正好学习一下 我用的是jdk8 5 xff0c 位于 JDK 根目录的 bin 文件夹下 xff0c 无需安装
  • Android Studio Gradle失败 Could not reolve play-services-vision-17.0.2.aar 等类似问题解决办法

    Android Studio Gradle失败 Could not reolve play services vision 17 0 2 aar 等类似问题解决办法 网上一些常规解决办法 如果上述常规解决办法尝试后 xff0c 都无法解决你
  • 利用fsl进行配准

    利用fsl进行配准 配准概念 配准就是将两个不同空间 体素 xff0c 扫描的位置不一致的nii xff0c 配准到同一个空间上 xff0c 使得两者在大脑上的相应位置就可以一一对应上了 通常MRI数据处理的步骤 xff1a 先配准到tem
  • 1.计算机概论

    学习linux前先来了解一下计算机概念 xff0c 如果了解相关内容 xff0c 可跳过本章节 1 1 电脑 电脑是一种计算机 xff0c 计算机实际是 xff1a 接受用户输入的命令与数据 xff0c 经由中央处理器的算术和逻辑单元运算后
  • SpringDataJPA——使用EntityManager利用原生SQL自定义复杂查询

    使用EntityManager 原生SQL查询方法记录以下学习过程中找到的其他文章地址 原生SQL查询方法 在这里进行记录以下使用过程 xff0c 注释已经很清晰 span class token annotation punctuatio
  • 操作系统(二十三)生产者消费者问题

    2 3 6 生产者消费者问题 生产者消费者问题 The proceducer consumer problem 是一个经典的进程同步的问题 xff0c 问题是这样描述的 xff1a 在操作系统中有一组生产者进程一组消费者进程 xff0c 生