三、操作系统——生产者-消费者问题(两个同步一个互斥)

一、问题描述

在这里插入图片描述

信号量机制实现进程互斥的步骤:

  1. 设置初值为1的互斥信号量
  2. 在访问临界区之间进行P操作
  3. 在访问完临界区之后进行V操作

信号量机制实现进程同步的步骤:

  1. 设置初值为0的同步信号量
  2. 在前操作之后对同步信号量执行V操作
  3. 在后操作之前对同步信号量执行P操作

注意:
前操作指的就是需要先进行的操作,比如:当缓冲区已满的时候,消费者先取走缓冲区的产品,生产者才能生产产品放入缓冲区。这里的“消费者先取走缓冲区的产品”就是前操作;而” 生产者生产产品放入缓冲区“就是后操作

在这里插入图片描述
注意:
生产者-消费者问题中共存在3个信号量:一个是空闲缓冲区对应的信号量,一个是产品对应的信号量,还有一个是用来实现互斥访问临界区的互斥信号量

  1. 生产者每次要消耗一个空闲缓冲区,而消耗一个资源(空闲缓冲区)也就是对这个资源的信号量执行P操作
    因为P操作会对这个资源的信号量的数值进行-1操作,如果该信号量-1后的数值 < 0,说明在没有进行-1操作之前,信号量的数值 是<= 0的。也就是说,在没有进行-1操作之前已经没有资源(空闲缓冲区),资源(空闲缓冲区)的数量为0,所以会使用block原语使进程从运行态进入阻塞态,并把该进程挂到该信号量的等待队列(即阻塞队列)中
    直到消费者释放一个空闲缓冲区,也就是对空闲缓冲区对应的信号量执行了V操作之后,也就是增加一个空闲缓冲区之后,生产者进程才能再次被唤醒

  2. 生产者进程在确认了空闲缓冲区的数量是足够的情况下,会生产一个产品(非空闲缓冲区),也就是对 产品所对应的信号量执行V操作
    因为V操作会对产品所对应的信号量的数值进行+1操作,相当于是往空闲缓冲区中放了一个产品,即非空闲缓冲区数量+1。如果进行+1操作之后,该信号量的数值<=0,说明在没有进行+1操作之前,该信号量的数值是<= -1的,这里的-1取绝对值之后代表的就是空闲缓冲区的数量,也就是等待队列中的进程数量为1。这时,会使用wakeup原语唤醒等待队列中的进程,让等待队列中的进程由阻塞态变为就绪态。
    而消费者在消耗一个产品之前,需要对这个产品所对应的信号量执行P操作,表示要消耗一个产品(即非空缓冲区)。

二、问题分析

在这里插入图片描述
在这里插入图片描述

三、如何实现?

在这里插入图片描述

第一步:
首先,明确生产者需要做2间事情:生产一个产品把产品放入缓冲区
消费者也需要做2间事情:从缓冲区取出一个产品使用一个产品

第二步:
生产者生产一个产品之后,相当于是消耗了一个空闲的缓冲区,而空闲缓冲区的数量是由empty来控制的,需要将empty的数量进行-1操作,所以要在生产者生产一个产品之后执行P(empty)操作,表示消耗了一个空闲缓冲区

第三步:
生产者把产品放入缓冲区之后,相当于是增加了一个产品(非空闲缓冲区),而非空闲缓冲区的数量是由full来控制的,需要将full的数量进行+1操作,所以要在生产者把产品放入缓冲区之后执行V(full)操作,表示增加了一个产品(非空闲缓冲区)

第四步:
消费者从缓冲区取出一个产品之前,需要执行P(full)操作,表示要消耗一个产品(非空缓冲区)

第五步:
消费者在使用产品之前,需要执行V(empty)操作,表示要增加一个空闲缓冲区

第六步:
实现多个生产者对生产者把产品放入缓冲区这个临界区的互斥访问
实现多个消费者对消费者从缓冲区取出产品这个临界区的互斥访问
生产者把产品放入缓冲区的操作应该放在临界区内,这样才能避免存在多个生产者并发的执行 将产品放入缓冲区的代码。所以要在进入临界区之前执行P(mutex)操作,离开临界区之后执行V(mutex)操作
消费者同理,需要在进入临界区之前执行P(mutex)操作,离开临界区之后执行V(mutex)操作

注意

  1. 如果要实现互斥关系的话,这对P、V操作是在同一个进程中的
  2. 如果要实现(一前一后的)同步关系的话,这对P、V操作是分别位于两个不同的进程之中的

在这里插入图片描述
在这里插入图片描述
对“前V后P”的理解:
前操作之后执行V操作,后操作之前执行P操作

在缓冲区为空的情况下:生产者生产产品需要在消费者消费产品之前。因此,在生产者生产产品之后,需要执行V(full)操作;消费者消费产品之前,需要执行P(full)操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络管理员中级第一套理论,计算机网络管理员第一套(中级)理论.doc

1、下列关于在知识产权制度中规定的“允许专利人对专利技术具有一定的垄断性并能够获得垄断”的理解&#xff0c;正确的是(D)A、违反了激励技术创新和保护技术创新的原则B、阻碍技术创新的不恰当做法C、不符合客观实际的做法D、激励技术创新和保护技术创新符合实际的正确做法--…

LeetCode 2148. 元素计数

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;统计并返回在 nums 中同时具有一个严格较小元素和一个严格较大元素的元素数目。 示例 1&#xff1a; 输入&#xff1a;nums [11,7,2,15] 输出&#xff1a;2 解释&#xff1a;元素 7 &#xff1a;严格较小元…

CSS浏览器兼容性----Hack

CSS Hack大致有3种表现形式&#xff0c;CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack&#xff0c;CSS Hack主要针对IE浏览器。类内部Hack&#xff1a;比如 IE6能识别下划线"_"和星号" * "&#xff0c;IE7能识别星号" * "&#xff0c;但…

四、操作系统——读者写者问题(详解)

一、问题描述&#xff1a; 二、需要满足的条件&#xff1a; 写进程与写进程之间必须互斥的写入数据&#xff08;因为如果两个写进程同时对共享数据中的区域A中的数据进行写操作的话&#xff0c;会导致数据错误覆盖的问题&#xff09;写进程与读进程之间必须互斥的访问共享数据…

二级vb笔试题库__全国计算机等级考试,2012年9月全国计算机二级VB笔试标准预测试卷试题六...

二级VisualBasic语言程序设计标准预测试卷六一、选择题(每小题2分。共70分)下列各题A)、B)、 C)、 D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置 上&#xff0c;答在试卷上不得分。(1)下列叙述中正确的是A)所有形态的二叉树都只…

LeetCode 2149. 按符号重排数组(双指针)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;数组长度为 偶数 &#xff0c;由数目相等的正整数和负整数组成。 你需要 重排 nums 中的元素&#xff0c;使修改后的数组满足下述条件&#xff1a; 任意 连续 的两个整数 符号相反对于符号…

五、操作系统——内存相关基础知识 和 进程运行的基本原理(详解)

一、概述 二、什么是内存&#xff1f;有何作用&#xff1f; 内存是用于存放数据的硬件。程序在执行之前&#xff0c;需要先放到内存中才能被CPU处理。 平时&#xff0c;我们各种各样的软件都是存储在外存&#xff08;辅存&#xff09;里。电脑的话&#xff0c;一般是存储在硬盘…

计算机网络cr什么意思,现在网络上的“CR”是指什么意思

1、CE&#xff1a;Customer Edge&#xff0c;用户边缘设备&#xff0c;是服务提供商所连接的用户端路由器。CE路由器通过连接一个或多个PE路由器&#xff0c;为用户提供服务接入。CE路由器通常是一台IP路由器&#xff0c;它与连接的PE路由器建立邻接关系。2、PE(Provider Edge)…

expected function body after function declarator

我出现这个错误是在pch中添加了一个a.h文件 然后在其他文件的b.h文件中就出现这个错误.. 后来排查出原因是: 在pch中, 这个a.h文件在b.h文件之后, 所以在b.h中使用的时候就会报错转载于:https://www.cnblogs.com/Rinpe/p/5077632.html

LeetCode 2150. 找出数组中的所有孤独数字(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。如果数字 x 在数组中仅出现 一次 &#xff0c;且没有 相邻 数字&#xff08;即&#xff0c;x 1 和 x - 1&#xff09;出现在数组中&#xff0c;则认为数字 x 是 孤独数字 。 返回 nums 中的 所有 孤独数字。你可以按…

六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)

一、概述 二、操作系统作为系统资源的管理者&#xff0c;当然也需要对内存进行管理&#xff0c;要管些什么呢&#xff1f; 1. 内存空间的分配与回收 连续分配&#xff1a;指为用户进程分配的必须是一个连续的内存空间。 1. 单一连续分配 在单一连续分配方式中&#xff0c;内…

计算机软件无形资产机械工具,考前秘籍,无形资产的定义及确认

原标题&#xff1a;考前秘籍&#xff0c;无形资产的定义及确认考查导向&#xff1a;每年考3分左右&#xff1b;比较简单&#xff0c;重要程度一般&#xff1b;建议与“固定资产”一章一起类比学习&#xff0c;效果更佳&#xff0c;效率更高。近三年主要考点&#xff1a;(1)无形…

一些iOS笔试题目

1.什么是arc&#xff1f;&#xff08;arc是为了解决什么问题诞生的&#xff1f;&#xff09; 首先解释ARC: automatic reference counting自动引用计数。 ARC几个要点&#xff1a; 在对象被创建时 retain count 1&#xff0c;在对象被release时 retain count -1.当retain count…

LeetCode 2151. 基于陈述统计最多好人数(状态压缩)

文章目录1. 题目2. 解题1. 题目 游戏中存在两种角色&#xff1a; 好人&#xff1a;该角色只说真话。坏人&#xff1a;该角色可能说真话&#xff0c;也可能说假话。 给你一个下标从 0 开始的二维整数数组 statements &#xff0c;大小为 n x n &#xff0c;表示 n 个玩家对彼…

七、操作系统——动态分区分配算法(详解)

一、引入 动态分区分配算法&#xff1a;在动态分区分配方式中&#xff0c;当很多个空闲分区都能满足需求时&#xff0c;应该选择哪个分区进行分配&#xff1f; 二、首次适应算法&#xff08;First Fit&#xff09; 算法思想&#xff1a;每次都从低地址开始查找&#xff0c;…

2015前端生态发展回顾(转)

引用苏宁前端架构师的一个总结作为开篇 编程技术及生态发展的三个阶段 最初的时候人们忙着补全各种API&#xff0c;代表着他们拥有的东西还很匮乏&#xff0c;需要在语言跟基础设施上继续完善然后就开始各种模式&#xff0c;标志他们做的东西逐渐变大变复杂&#xff0c;需要更好…

计算机应用基础一级考试题库,2018一级结构工程师《计算机应用基础》题库及答案(一)...

大家做好准备迎接考试了吗?出国留学网为您整理了“2018一级结构工程师《计算机应用基础》题库及答案(一)”&#xff0c;只要付出了辛勤的劳动&#xff0c;总会有丰硕的收获!欢迎广大考生前来学习。2018一级结构工程师《计算机应用基础》题库及答案(一)1. 具有多媒体功能的微型…

LeetCode 2154. 将找到的值乘以 2

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;另给你一个整数 original &#xff0c;这是需要在 nums 中搜索的第一个数字。 接下来&#xff0c;你需要按下述步骤操作&#xff1a; 如果在 nums 中找到 original &#xff0c;将 original 乘以 2 &#…

网际控制报文协议ICMP(Internet Control Message Protocol)(详解)

一、回顾下TCP/IP协议栈 二、ICMP(Internet Control Message Protocol)协议概述 三、ICMP协议的组成 四、ICMP差错报告报文&#xff08;5种&#xff09;&#xff1a; 终点不可达&#xff1a;当路由器或主机不能交付数据报时就向源点发送终点不可达报文。&#xff08;无法交付&…

计算机一级实训报告册,计算机一级实验报告8.doc

文档介绍&#xff1a;计算机应用教学实验报告《计算机应用》课程实验报告实验地点:实验名称实验八Word2010图文混排指导教师时间姓名班级学号15128201组号同组者姓名评分实验目的1、熟练掌握在文档中插入各种对象的方法。2、掌握各种图形对象的格式设置。3、掌握嵌入式图片和浮…