当前位置: 首页 > news >正文

操作系统经典问题——消费者生产者问题

今日在学习操作系统的过程中遇到了这个问题,实在是很苦恼一时间对于这种问题以及老师上课根据这个问题衍生的问题实在是一头雾水。在网络上寻找了一些大佬的讲解之后算是暂时有了点茅塞顿开的感觉。

首先第一点什么是生产者——消费者问题:

系统中有一组生产者进程和一组消费者进程。生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用,那么他们之间具有这样一层关系。

生产者、消费者共享一个初始为空、大小为n的缓冲区。

只有缓冲区没有满的时候才可以让生产者生产产品并放到缓冲区当中。否则只能进行等待。

即缓冲区没有满->生产者生产

只有缓冲区有东西的时候才可以让消费者进行消费,否则只能进行等待。

即缓冲区不空->消费者进行消费

缓冲区是临界资源所有各进程的访问都是互斥的

由上面的描述可知:要执行生产者生产操作的前提条件是缓冲区没满,而执行消费者消费的前提条件是缓冲区不空。

在前操作之后对相应的同步信息量执行V操作  在后操作之前对相应的同步信息量执行P操作

这里我们设置三个信号量:一个互斥信号量mutex用来实现对缓冲区的访问,一个同步信号量empty表示空缓冲区的数量,一个同步信号量full表示非空缓冲区的数量。在这里为了方便新版书上的wait和signal两个函数同一简化为P和V下面所书写均是P和V。

semaphore mutex=1,empty=n,full=0;初始状态下互斥信号量是1空缓冲区也是有n个的非空缓冲区是0个。

生产者生产:

producer (){

while(1)

{ 生产一个产品;

P(empty);//判断是否为空

P(mutex);//判断是否可以进入临界区寻找资源

把产品放入缓冲区;

V(mutex);//释放临界区的资源

V(full); } //非缓冲区有多少产品}

P(mutex)和V(mutex)实现进程的互斥访问,P(empty)实现让缓冲区没满作为生产者生产的前操作,即当empty=0时即无空闲缓冲区数量时,让消费者消费作为生产者生产的前操作。
V(full)实现让缓冲区不空作为消费者消费的前操作,即当full=0时即缓冲区全为空时,让生产者生产作为消费者消费的前操作。

消费者消费

consumer (){

while(1)

{ P(full);//判断非缓冲区是否还有产品

P(mutex);//判断是否可以进入临界区寻找资源

从缓冲区取出一个产品;

V(mutex);/释放临界区的资源

V(empty);//为空缓冲区增加一个空位置

使用产品; }

P(mutex)和V(mutex)实现进程的互斥访问,V(empty)实现让缓冲区没满作为生产者生产的前操作,即当empty=0时即无空闲缓冲区数量时,让消费者消费作为生产者生产的前操作。
P(full)实现让缓冲区不空作为消费者消费的前操作,即当full=0时即缓冲区全为空时,让生产者生产作为消费者消费的前操作。
 

相关文章:

操作系统经典问题——消费者生产者问题

今日在学习操作系统的过程中遇到了这个问题,实在是很苦恼一时间对于这种问题以及老师上课根据这个问题衍生的问题实在是一头雾水。在网络上寻找了一些大佬的讲解之后算是暂时有了点茅塞顿开的感觉。 首先第一点什么是生产者——消费者问题: 系统中有一…...

网络安全工程师在面试安全岗位时,哪些内容是加分项?

金三银四已经来了,很多小伙伴都在困惑,面试网络安全工程师的时候,有哪些技能是加分项呢?接下来,我简单说说! 去年我在微博上贴了一些在面试安全工作时会加分的内容,如下: 1. wooyu…...

前端整理 —— vue

1. vue的生命周期 经典爱问,感觉内容挺多的 介绍一下有哪几个 vue2中的生命周期有11个,分别为beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy&…...

HTML快速入门

目录HTML概念HTML基本格式基本语法常用标签1.文件标签:构成html最基本的标签2.文本标签:和文本有关的标签3.列表标签4.图片标签5.超链接标签6.表格标签7.表单标签HTML概念 HTML是最基础的网页开发语言,Hyper Text Markup Language&#xff0…...

哈希冲突

为什么会有哈希冲突?哈希表通过哈希函数来计算存放数据,在curd数据时不用多次比较,时间复杂度O(1)。但是凡事都有利弊,不同关键字通过相同哈希函数可能计算出来相同的存放地址,这种现象被称为哈…...

git添加子模块(submodule)

git添加子模块(submodule) 背景 有时候自己的项目需要用到别人的开源代码,例如 freertos 和 tinyusb 这个时候有两种选择 将开源的代码下载下来放到自己的 git 中管理 缺点:如果远端仓库更新,自己仓库的代码不会更新 将开源代码通过子模块…...

C++ 11 pair

class pair 可将两个 value视为一个单元。C标准库内多处用到了这个 class 。尤其是容器 map、multimap、unordered_map和 unordered_multimap就是使用 pair 来管理其以 key/value pair形式存在的元素。任何函数如果需要返回两个 value,也需要用到 pair,例…...

反向传播与随机梯度下降

反向传播实际上就是在算各个阶段梯度,每层的传入实际是之前各层根据链式法则梯度相乘的结果。反向传播最初传入的Δout是1,Δ通常表示很少量的意思,Δout1的时候这样在反向传播的时候算出来的dw和dx刚好就是当前梯度。深度神经网络中每层都会…...

一个conda引起的CPU异常

03/11/2023 登陆访问用户CPU异常 错误描述 早上向往常一样打开机器,突然感觉CPU有点"乱飙",因为是个人机器,没有别人使用,所以感觉有点问题。 排错流程 首先查看各个进程的资源占用情况 top # 按住P,以CPU的…...

java Date 和 Calendar类 万字详解(通俗易懂)

Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类,内容包括但不限于Date类简介,Date类使用…...

扩展欧几里得算法及其应用

前言 由于数论的板子真的很抽象,也很难背,所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用,不涉及证明,如需理解证明还请各位移步其他优秀的讲解! 扩展欧几里得算法 先粘一下板子的代码 typedef lo…...

JAVA练习75-全排列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 3月11日练习内容 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目-…...

Linux下Docker安装mysql-超详细步骤

安装Docker Engine官方参考文档:https://docs.docker.com/engine/install/centos/若之前有安装docker,需要先卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…...

弹性存储-对象存储OSS部分

对象存储介绍 对象存储(object storage service,简称oss),具备与平台无关的rest api接口,可提供99.9999999999%(12个9)的数据持久性和99.995%的数据可用性。 OSS优势 功能介绍 存储空间bucke…...

强推!30个遥感数据下载网站整理分享

1、中国遥感数据共享网(http://rs.ceode.ac.cn/)国内存档周期最长的数据网站,对Landsat数据免费共享,也可订购国外商业卫星数据。注册账号,通过审核就可直接下载。2、中国资源卫星应用中心(https://data.cr…...

进程系统调用

进程系统调用 文章目录进程系统调用fork()进程创建:fock()fork函数fork用法僵尸进程孤儿进程vfork函数vfork与fork区别exec函数族exec函数族-何时使用?exec函数族语法exec函数族使用区别exit和_exit_exit和exit的区别wait和waitpidfork() 进程创建&…...

dubbo进阶——服务导出

服务导出 在这里记录一下对" Dubbo 导出服务的过程"的研究。 触发时机 public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEv…...

【竞品分析】如何撰写竞品分析?竞品分析的基本结构?以及优秀的竞品分析案例

文章目录一、撰写竞品分析的意义二、撰写的节点三、竞品分析内容的基本结构四、总结本文对视频 如何撰写竞品分析&#xff08;demo&#xff09;进行了总结。一、撰写竞品分析的意义 竞品分析是指对现有的或潜在的竞争产品的优势和劣势进行评价。现在被广泛应用于互联网产品的…...

海思ubootsd卡协议

在start_armboot()函数中调用mmc_initialize(0)初始化mmc;最终调用到int hi_mci_initialize(unsigned int dev_num)函数;内容如下:static int hi_mci_initialize(unsigned int dev_num) {struct mmc *mmc NULL;static struct himci_host *host;unsigned int regval;unsigned l…...

nuxt3使用总结

目录 背景 安装 项目配置 路由 Tailwindcss引入 全局样式配置 css预处理器 安装 Tailwindcss 项目的配置 部署上线 seo优化 背景 新入职了一家公司&#xff0c;刚进入公司第一个需求就是先做一个公司的官网&#xff0c;需要使用vue写&#xff0c;作为祖师爷的粉丝…...

保姆级教程:在OrangePi 5 Plus上从SSD启动Ubuntu 22.04,并配置ROS2 Humble环境

OrangePi 5 Plus开发板全栈配置指南&#xff1a;从SSD启动到ROS2 Humble环境搭建 拿到一块OrangePi 5 Plus开发板时&#xff0c;如何快速搭建一个稳定高效的开发环境&#xff1f;本文将手把手带你完成从系统烧录到ROS2环境配置的全过程&#xff0c;特别针对ARM64架构的优化方案…...

从Python转C++必看:C++20的starts_with/ends_with和Python有何不同?5个易错点详解

从Python转C必看&#xff1a;C20的starts_with/ends_with和Python有何不同&#xff1f;5个易错点详解 当你在Python中熟练使用startswith()和endswith()多年后&#xff0c;突然切换到C20的starts_with和ends_with&#xff0c;可能会觉得"这不就是换个语法吗&#xff1f;&q…...

提升钱包开发效率:用快马AI一键生成imToken风格的高复用UI组件

提升钱包开发效率&#xff1a;用快马AI一键生成imToken风格的高复用UI组件 开发钱包类应用时&#xff0c;最让人头疼的就是那些重复性的UI组件和交互逻辑。每次新项目都要从零开始写资产卡片、交易记录列表、二维码弹窗这些基础组件&#xff0c;不仅耗时耗力&#xff0c;还容易…...

毕业论文党必看!用MathType实现Word公式自动编号的3种隐藏技巧

毕业论文公式排版终极指南&#xff1a;MathType高效编号技巧全解析 在撰写理工科毕业论文或学术论文时&#xff0c;公式排版往往是让研究者头疼的环节。传统手动编号不仅效率低下&#xff0c;更会在修改文档时引发连锁灾难——一个公式的增删可能导致全篇编号错乱。MathType作为…...

ai全程护航:让快马智能助手帮你搞定proteus安装与初学难题

最近在折腾Proteus仿真软件时&#xff0c;发现从安装到入门会遇到不少"坑"。好在发现了InsCode(快马)平台的AI辅助功能&#xff0c;整个过程变得轻松多了。这里分享下如何用AI搞定Proteus全流程难题的实践心得。 智能安装诊断 第一次安装Proteus时&#xff0c;遇到许…...

炸穿 2026 技术圈!AI Agent 从 0 到 1 商业落地全攻略,附 Python 可跑源码 + 双场景变现

引言:“AI Agent&#xff1a;程序员效率革命的最后一公里”前言&#xff1a;还在死磕 CRUD、熬夜改 BUG、被重复研发工作榨干精力&#xff1f;2026 年的技术风口早已彻底转向 ——AI Agent&#xff0c;从华为虚拟工程师、蘑菇物联工业智能体&#xff0c;到全行业自动化落地&…...

从XMind到禅道:定制化脚本实现测试用例高效导入

1. 为什么需要从XMind导入测试用例到禅道&#xff1f; 在日常测试工作中&#xff0c;XMind思维导图因其直观的结构和高效的编辑方式&#xff0c;成为很多测试工程师编写测试用例的首选工具。我自己也深有体会&#xff0c;用XMind梳理测试点特别顺手&#xff0c;一个下午就能完成…...

数字电路设计避坑指南:RS触发器和JK触发器的常见应用误区与波形分析

数字电路设计避坑指南&#xff1a;RS触发器和JK触发器的常见应用误区与波形分析 在数字电路设计中&#xff0c;触发器作为时序逻辑的基础单元&#xff0c;其稳定性和可靠性直接影响整个系统的性能。RS触发器和JK触发器作为两种最常用的触发器类型&#xff0c;看似简单的逻辑背…...

从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比

1. YOLO系列模型的技术演进路径 YOLO&#xff08;You Only Look Once&#xff09;系列模型作为目标检测领域的标杆算法&#xff0c;从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新&#xff0c;这使得YOLO系列在实时目标检测任务中始终…...

从555到正弦波:手把手教你用立创EDA仿真+打样一个2KHz波形发生器(附完整工程)

从555到正弦波&#xff1a;立创EDA全流程打造2KHz波形发生器实战指南 在电子设计领域&#xff0c;波形发生器是最基础却又最考验设计功底的经典项目之一。想象一下&#xff0c;当你亲手设计的电路板输出完美的正弦波时&#xff0c;那种成就感绝非购买现成模块可比。本文将带你用…...