关于信号量的使用,关键是我们将问题的真实过程理解透彻,问题中不能同时进行的动作需要信号量的保护机制来解决。
①生产者:满了不放
②消费者:空了不拿
③生产者消费者不能同时进行动作

Int in = 0, out = 0;
Item buffer[n];
Semaphore mutex = 1, empty = n, full = 0;
void producer(){do{produce an item in nextp;...Swait(empty, mutex)          如果不满,进入临界资源补货buffer[in]  = nextp;in = (in+1) % n;Ssignal(mutex, full);      放出临界资源,full数量加一}while(true);
}
void consumer(){
do
{Swait(full, mutex)         //如果不空,进入临界资源拿货nextp = buffer[out];out = (out+1) mod n;Ssignal(mutex, empty)      释放临界资源,empty加一consume the item in nextp;
}while(true)void main(){
parbeginprocedure();consumer();coend;
}

注意,生产者的步骤一定是,先判断货物的数量是不是满了, 再决进不进临界资源

如果生产者的顺序是,先进入临界资源,再判定货物数量是不是满的,这个时候发现货物满了,生产者就等待消费者来拿货物, 但是消费者来的时候发现里面有人在工作就直接走了。。。。。死锁了

操作系统 生产者消费者问题解释相关推荐

  1. 操作系统 —— 生产者消费者模型

    文章目录 1. 生产者消费者模型的理解 1.1 串行的概念 1.2 并行的概念 1.3 简单总结: 2. 基于阻塞队列(block queue)实现此模型 2.1 阻塞队列的实现 2.2 使用阻塞队列 ...

  2. 操作系统生产者消费者问题实验报告

    操作系统实验报告 进程通信 1. 问题描述及需求分析: 问题描述 本次实验实现生产者和消费者之间的通信,即生产者-消费者问题.生产者一次生成一个元素放入缓冲池中,消费者一次可以从缓冲池中取出一个元素. ...

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

    一.问题描述 信号量机制实现进程互斥的步骤: 设置初值为1的互斥信号量 在访问临界区之间进行P操作 在访问完临界区之后进行V操作 信号量机制实现进程同步的步骤: 设置初值为0的同步信号量 在前操作之后 ...

  4. 操作系统——生产者-消费者问题

    一.简单生产者-消费者问题 问题描述:一组生产者进程和一组消费者进程共享一个初始为空.大小为 n 的缓冲区,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待:只有缓冲区不为空时,消费者才能 ...

  5. 操作系统 - - 生产者—消费者问题(PV操作)代码显示

    生产者 - 消费者问题 假设在生产者和消费者之间的公用缓冲池具有n个缓冲区,可利用互斥信号量mutex实现诸进程的互斥使用:利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量. 又 ...

  6. 操作系统——生产者消费者模型以及信号量

    生产者--消费者问题是 多个进程因共享一个缓存区而产生的相互依赖问题 .具体来说,生产者进程往往要往共享缓存区中放内容.消费者进程从共享缓存中取内容, 当缓存区满的时候 ,生产者进程需要等待消费者进程 ...

  7. 操作系统 — 生产者消费者模型

    生产者消费者模型 所谓的生产者消费者模型就是一个类似于队列一样的东西串起来,这个队列可以想像成一个存放产品的"仓库",生产者只需要关心这个 "仓库",并不需要关 ...

  8. [操作系统]生产者/消费者问题

    生产者/消费者问题也叫缓存绑定问题(bounded- buffer),是一个经典的.多进程同步问题. 单生产者和单消费者 仓库容量为一的情况 问题分析: 仓库有空位时,生产者才能生产产品,并放入仓库中 ...

  9. (二十二)操作系统-生产者·消费者问题

    文章目录 一.问题描述 二.问题分析 三.PV操作题目分析步骤 1. 关系分析 2. 整理思路 3. 设置信号量 4. 编写代码 四.能否改变相邻P.V操作的顺序? 五.小结 1. PV操作题目的解题 ...

  10. 操作系统—生产者消费者

    问题描述及需求分析 实现生产者和消费者之间的通信,即生产者-消费者问题.生产者一次生成一个元素放入缓冲池中,消费者一次可以从缓冲池中取出一个元素.要求实现生产者与消费者之间的同步,即当缓冲池为空时,消 ...

最新文章

  1. 存储过程mysql into select into_mysql 存储过程select into select into select的搜索结果-阿里云开发者社区...
  2. shader 3 rendering path
  3. 实现runable接口创建线程
  4. tf 矩阵行和列交换_TF-搞不懂的TF矩阵加法
  5. 强化学习常用算法+实际应用
  6. codeforces:ProblemMset
  7. 三星 NAND 存储器新厂施工顺遂,上半年有望如期投产
  8. 来访登记系统源码_ZKTeco|智能访客管理系统
  9. 安装VS2017报错:程序包清单签名验证失败
  10. 全国计算机等级考试一级模拟考,全国计算机等级考试一级模拟试题一
  11. c语言 zipf分布,Zipf分布:如何测量Zipf分布
  12. 飞秒激光制备量子计算机,飞秒激光直写光量子逻辑门.PDF
  13. SpringBoot 配置文件存放位置及读取顺序
  14. 修改移动硬盘盘符(G盘--E盘)
  15. 苹果CMS接入GOGO支付实现个人收款回调详细教程(附插件)
  16. delphi中Bmp转Jpeg JPG转BMP
  17. 计算机相关论文10000字,有关计算机毕业论文怎么写(10000字)
  18. 从零开始的WordPress个人博客搭建
  19. 耿建超英语语法---非谓语动词作状语
  20. vue设置页面title

热门文章

  1. ORACLE 随机数 dbms_random
  2. 改变你一生的五句话 (转)
  3. pytorch——nn.BatchNorm2d()函数
  4. 【车道线检测与寻迹】【实践】4月17 线车位的实验思路与后续工作构想
  5. 数据挖掘中最易犯的10个错误,请绕行!
  6. python基础--导入模块
  7. JavaScript学习之函数的定义方式及调用
  8. Ajax与Comet
  9. CrateDB 3.2.4 发布,大规模可伸缩的数据存储系统
  10. 网站服务器中病毒或被***怎么办?