生产者-消费者问题(操作系统)
生产者-消费者问题从特殊到一般(从易到难)可以分3种形式:
一个生产者、一个消费者、一个缓冲区的问题;
一个生产者、一个消费者、n个缓冲区的问题;
k个生产者、m个消费者、n个缓冲区的问题;
★当缓冲区空时,生产者可将产品存入缓冲区;当缓冲区满时,生产者必须等待 (阻塞),待消费者取走产品后将其唤醒后,才能将产品存入。
1.为生产者设置1个私有信号量empty,其初值为1,表示有1个空缓冲区;为消费者设置1个私有信号量full,其初值为0,表示开始时没有满缓冲区;(信号量初值由物理意义确定)2.生产者将产品存入缓冲区之前,应先测试缓冲区是否空:执行wait(empty)操作;离开临界区(存入产品)后,应通知(可能会唤醒)消费者:执行signal(full)操作;3.消费者从缓冲区取产品之前,应先测试缓冲区是否满:执行wait(full)操作;离开临界区(取走产品)后,应通知(可能会唤醒)生产者:执行signal(empty)操作
一个生产者、一个消费者、一个缓冲区
生产者消费者问题的算法描述如下所示:
初始化设置
semaphore empty,full;
empty=1;full=0;
生产者
parbegin
process Producer:
{ produce an item in nextp;wait(empty);//测试buffer=nextp;signal(full);//通知消费者
}
消费者
process Consumer:
{wait(full); //测试nextc=buffer;signal(empty); //通知consume the itemin nextc;
}
parend
信号量机制解决进程同步问题的一般方法:
一个生产者、一个消费者、n个缓冲区
为生产者设置一个资源信号量empty,其初值为生产者的可用资源数(空缓冲区的个数)n,即empty=n。为消费者设置一个资源信号量full,其初值为消费者的可用资源数(满缓冲区的个数)0,即full=0。
生产者消费者问题的算法描述如下所示:
初始化设置
semaphore empty,full;
empty=n;full=0;
int in=0,out=0; //下标
生产者
parbegin
process Producer:
{ produce an item in nextp;wait(empty);//测试buffer[in]=nextp;in=(in+1)%n;signal(full);//通知消费者
}
消费者
process Consumer:
{wait(full); //测试nextc=buffer[out];out=(out+1)%n;signal(empty); //通知consume the item in nextc;
}
parend
本题中in和out不是共享变量(因为只有一个生产者和一个消费者),无需互斥访问。
一个生产者、一个消费者、n个缓冲区
初始化
semaphore mutex,empty,full ;
item buffer[n] ;
int in = 0,out = 0 ;
mutex.value = 1;
empty.value=n,full.value=0;
生产者
parbegin //并发执行开始
process produceri (i=1,2,…,k) //生产者进程
{item nextp;while (true){ produce an item nextp;wait(empty) ; //测试是否有可用的资源wait(mutex); //互斥(进入临界区)buffer[in] = nextp ;in = (in + 1)% n ;signal(mutex) ; //退出临界区signal(full) ; //通知(可能唤醒)协作方}
}
消费者
process consumerj (j=1,2,…,m)
{ item nextc ;while (true) {wait(full); //测试是否有可用的资源wait(mutex);nextc = buffer[out] ;out = (out + 1)% n ;signal(mutex);//生产者消费者互斥访问缓冲区,同时生产者互斥生产,消费者户次消费signal(empty); //通知(可能唤醒)协作方consume the item in nextc ;}
}
parend //并发执行结束
注意:
重申信号量解决同步问题的要点:
生产者-消费者问题(操作系统)相关推荐
- 生产者消费者问题 操作系统
2.15 生产者消费者问题 Dijkstra对同步问题的抽象 抽象解释 一个或多个生产者生产资源,放入临界区 一次仅有一个消费者访问临界区并消耗资源 每次仅有一名生产者/消费者访问临界区 临界区满时生 ...
- 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)
文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...
- 操作系统课设--使用信号量解决生产者/消费者同步问题
山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...
- 操作系统(二十三)生产者消费者问题
2.3.6 生产者消费者问题 生产者消费者问题(The proceducer-consumer problem)是一个经典的进程同步的问题,问题是这样描述的:在操作系统中有一组生产者进程一组消费者进程 ...
- 生产者和消费者代码———操作系统_操作系统基础15-生产者消费者问题
在上一篇操作系统基础14提到通过信号量解决生产者消费者问题.本篇来详细说说操作系统中的经典问题-生成者消费者问题 生产者消费者问题 (Producer-consumer problem) 该问题是一个 ...
- 【操作系统】实验 生产者-消费者问题解决方案
生产者-消费者问题 生产者-消费者问题,也称有界缓冲问题,属于操作系统进程同步的经典问题,在多线程并发编程中也是经典案例,值得去学习. 有一个生产者线程和一个消费者线程,生产者生产资源到资源缓冲区,消 ...
- 【操作系统/OS笔记13】信号量、PV操作、管程、条件变量、生产者消费者问题
本次笔记内容: 10.1 背景 10.2 信号量 10.3 信号量的使用 10.4 信号量的实现 10.5 管程 文章目录 信号量的提出背景 信号量(semaphore) 信号量数据类型 信号量类似铁 ...
- 操作系统实验 生产者消费者问题详解
操作系统课程设计 生产者消费者实验报告 一.实验目的 加深对进程概念的理解,明确进程与程序的区别. 认识并发执行的本质. 理解和掌握Linux和Windows进程通信系统调用的功能,通过实验和学习,提 ...
- 操作系统生产者消费者问题实验报告
操作系统实验报告 进程通信 1. 问题描述及需求分析: 问题描述 本次实验实现生产者和消费者之间的通信,即生产者-消费者问题.生产者一次生成一个元素放入缓冲池中,消费者一次可以从缓冲池中取出一个元素. ...
- 操作系统 —— 生产者消费者模型
文章目录 1. 生产者消费者模型的理解 1.1 串行的概念 1.2 并行的概念 1.3 简单总结: 2. 基于阻塞队列(block queue)实现此模型 2.1 阻塞队列的实现 2.2 使用阻塞队列 ...
最新文章
- Android自定义流式布局-FlowLayout
- 将一种文本类型安全的转化为另一种类型
- java线程池的使用
- [YTU]_2532(投简历)
- php用正则_php 正则表达式匹配(持续更新)
- C# 中用DES 对称Key,IV 加密,前端crypto.js 解密
- wireshark 分析mptcp ecn语句
- Java中常见的设计模式
- java 调用 pb dll_[转载]一个java调用delphi写的dll问题,郁闷了一天一晚解决
- 逍遥模拟器微信提示无法连接服务器,逍遥模拟器无法连接网络怎么办?
- 华中科技大学计算机免试,华中科技大学计算机学院2015年接收推荐免试研究生待录取结果公示...
- Dear小弟×××,给你们的一封信「社区运营入门系列 序」
- 【AI语音】九联UNT402A_通刷_纯净精简_免费线刷固件包
- 03 分布式系统的技术栈
- c语言指针 —— 面试题
- Lazada代运营分享—Lazada新手运营快速提升流量交易额的三大核心技巧
- dz论坛ucenter打不开mysql,Discuz! X3搬家后UCenter出现UCenter info: MySQL Query Error解决方案...
- 解决 XXX cannot be resolved or is not a field 问题
- 联想y7000-2019黑苹果安装笔记(自用)
- CentOS7.6 安装配置Amber18/AmberTools18(GPU加速版)
热门文章
- 新浪微博搜索页用户信息爬取
- FragmentPagerAdapter刷新notifyDataSetChanged无效
- 什么是digg?digg 是什么
- posix_spawn函数
- 美国老姐看完200+中国学生SCI论文,怒写超详细“中国人英文论文写作指南”!还被推上了B站热门…...
- 形形色色的图片格式详解
- 802.3af与802.3at区别及PSE与PD名词解释
- 华为 android 安全,华为 EMUI/Magic UI 安全更新 2020-3
- 基于SSM java jsp汽车俱乐部网站
- 操作系统——内存分配管理