问题描述

假设一个系统有三个抽烟者进程和一个供应 者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷
起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中,第一个拥有烟草
第二个拥有纸、第三个拥有胶水。供应者进程无限地提供三种材料,供应者每次将两种材料放桌
子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者进程一个信号告诉完成了,供
应者就会放另外两种材料再桌上,这个过程一直重复(让三个抽烟者轮流地抽烟)

如上图,

第一个吸烟者拥有烟草,需要纸和胶水才能完成卷烟

第二个吸烟者拥有纸,需要烟草和胶水

第三个吸烟者拥有胶水,需要烟草和纸


问题分析

本质上这题也屆于“生产者-消费者,问题,更详细的说应该是“可生产多种产品的单生产者-我
消费者”

关系分析。找出题目中描述的各个进程,分析它们之问的同步、互斥关系。如下图

P\V操作思路

代码实现

//offer0:桌上组合一的数量
//offer1:桌上组合二的数量
//offer2:桌上组合三的数量
//finish:吸烟者是否完成吸烟
//i:实现交替吸烟Sem offer0=0;
Sem offer1=0;
Sem offer2=0;
Sem finish=0;
int i=0;
provider(){//供应者进程
if(i==0){
//将第一个吸烟者所需材料放在桌子上
V(offer0);
}else if(i==1){
//将第二个吸烟者所需材料放在桌子上
V(offer1);
}else if(i==2){
//将第三个吸烟者所需材料放在桌子上
V(offer2);
}
i=(i+1)%3;
p(finish);//如果吸烟者没把烟抽完,则进入阻塞
}
//吸烟者一的进程
Smoker0(){
p(offer0);
//卷烟、抽掉
v(finish);
}
//吸烟者二的进程
Smoker1(){
p(offer1);
//卷烟、抽掉
v(finish);
}
//吸烟者三的进程
Smoker2(){
p(offer2);
//卷烟、抽掉
v(finish);
}

【操作系统】进程-吸烟者问题相关推荐

  1. linux 进程管理 ppt,linux操作系统-进程管理和打印管理.ppt

    <linux操作系统-进程管理和打印管理.ppt>由会员分享,可在线阅读,更多相关<linux操作系统-进程管理和打印管理.ppt(25页珍藏版)>请在装配图网上搜索. 1.进 ...

  2. 操作系统——进程之基本介绍

    操作系统--进程之基本介绍 一.进程的概念 1.进程和进程实体 2.进程的组织方式 3.进程的特征 二.进程的状态与转换 1.进程的状态 2.进程的转换 三.进程控制 1.定义 2.原语控制 ①创建原 ...

  3. 操作系统——进程之处理机调度

    操作系统--进程之处理机调度 一.处理机调度的本概念和层次 1.高级调度(作业调度) 2.中级调度(内存调度) 3.低级调度(进程调度) 二.进程调度的时机.切换与过程.方式 1.进程调度的时机 2. ...

  4. 操作系统-进程方案知识详解

    操作系统-进程方案 进程的概念 进程调度 操作进程 进程间通信 系统的例子IPC 客户机-服务器系统中的通信 目标 介绍进程的概念--一个正在执行的程序,它构成了所有计算的基础 描述过程的各种特性,包 ...

  5. 操作系统 - 进程与线程的区别[超详解]

    操作系统 - 进程与线程的区别[超详解]面试高频考题

  6. 操作系统 - 进程和内存

    操作系统 - 进程和内存 操作系统内核和Shell 系统调用 进程管理 1. 进程控制块PCB 2. 进程的状态 3. 进程通信 3.1 共享存储 3.2 管道 Or 无名管道 3.3 有名管道 3. ...

  7. 操作系统——进程和线程的区别

    操作系统--进程和线程的区别 最近学习了操作系统中的进程和线程这两个知识点,昨天老师给我们出了一道题:进程和线程的区别.听完题目后一脸懵逼,只想到了进程的一部分概念,回来之后就查书,找到了答案. 1. ...

  8. 【操作系统-进程】PV操作——吸烟者问题

    文章目录 吸烟者问题 解题步骤 Step 1. 有几类进程 Step 2. 用中文描述动作 Step 3. 添加 PV 操作,用中文描述里面的操作 Step 4. 检查是否出现死锁 Step 5. 定 ...

  9. 考研—操作系统—进程管理

    综述:何谓进程,进行中的程序,顾名思义,进程就是运行中的程序.即用户使用时的东西.所以进程是一种动态的概念,是只存在一段时间的过程概念.有着开始有着灭亡.进程可以称为是动态的程序.是程序实现功能时的投 ...

最新文章

  1. 少样本学习原理快速入门,并翻译《Free Lunch for Few-Shot Learning: Distribution Calibration》
  2. linux 下 gcc o2优化可能出现的问题
  3. 基于直方图的图像增强算法(HE、CLAHE、Retinex)
  4. JSONP的原理与实现(基于jQuery)
  5. rpg人物制作软件_新机制和随机性的完美结合!新RPG《元素梦境》参上
  6. ALGO-22 数的划分(DFS,经典剪枝)
  7. 回溯法——旅行售货员问题
  8. Gradle打包命令记录
  9. oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540
  10. mysql explain 结果值介绍
  11. 阶乘计算升级版 (20分)_求1!+2!+3!+...+20!的和
  12. 活动丨想和大咖云风来场1对1的亲面交流吗?!快来分享你的《程序员修炼之道》学习心得!
  13. 硬盘属于计算机的主存吗,.硬盘装在主机箱内,因此硬盘属于主存对吗
  14. STM32学习记录——MD300二维码扫描模块
  15. 网站受到流量攻击怎么办
  16. 怎样用c语言预测股票价格,如何根据时间和价格的波动来预测股票走势
  17. LeetCode 134. 加油站(C++)
  18. U盘无法格式化(提示U盘文件系统变为了RAW格式)【一般应用】
  19. 头牌知产介绍空气炸锅商标转让类别
  20. 【满分】【华为OD机试真题2023 JAVAJS】查找重复代码

热门文章

  1. 第一代计算机硬件逻辑主要采用电子管,云南省计算机一级考试题库4
  2. Python 字典类型转换json格式
  3. Rabbitmq 和erlang 安装成功但是网面访问不了
  4. 【Python语言基础】——Python While 循环
  5. SYD8811 使用外部32.768Khz晶振作为时钟源
  6. 什么是Web服务器,如何配置
  7. Android屏幕直播方案
  8. steam下载捆绑流氓软件??!
  9. MT6758处理器芯片资料介绍
  10. 【node】升级 Node 版本教程