【操作系统】进程-吸烟者问题
问题描述
假设一个系统有三个抽烟者进程和一个供应 者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷
起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中,第一个拥有烟草
第二个拥有纸、第三个拥有胶水。供应者进程无限地提供三种材料,供应者每次将两种材料放桌
子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者进程一个信号告诉完成了,供
应者就会放另外两种材料再桌上,这个过程一直重复(让三个抽烟者轮流地抽烟)
如上图,
第一个吸烟者拥有烟草,需要纸和胶水才能完成卷烟
第二个吸烟者拥有纸,需要烟草和胶水
第三个吸烟者拥有胶水,需要烟草和纸
问题分析
本质上这题也屆于“生产者-消费者,问题,更详细的说应该是“可生产多种产品的单生产者-我
消费者”
关系分析。找出题目中描述的各个进程,分析它们之问的同步、互斥关系。如下图
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);
}
【操作系统】进程-吸烟者问题相关推荐
- linux 进程管理 ppt,linux操作系统-进程管理和打印管理.ppt
<linux操作系统-进程管理和打印管理.ppt>由会员分享,可在线阅读,更多相关<linux操作系统-进程管理和打印管理.ppt(25页珍藏版)>请在装配图网上搜索. 1.进 ...
- 操作系统——进程之基本介绍
操作系统--进程之基本介绍 一.进程的概念 1.进程和进程实体 2.进程的组织方式 3.进程的特征 二.进程的状态与转换 1.进程的状态 2.进程的转换 三.进程控制 1.定义 2.原语控制 ①创建原 ...
- 操作系统——进程之处理机调度
操作系统--进程之处理机调度 一.处理机调度的本概念和层次 1.高级调度(作业调度) 2.中级调度(内存调度) 3.低级调度(进程调度) 二.进程调度的时机.切换与过程.方式 1.进程调度的时机 2. ...
- 操作系统-进程方案知识详解
操作系统-进程方案 进程的概念 进程调度 操作进程 进程间通信 系统的例子IPC 客户机-服务器系统中的通信 目标 介绍进程的概念--一个正在执行的程序,它构成了所有计算的基础 描述过程的各种特性,包 ...
- 操作系统 - 进程与线程的区别[超详解]
操作系统 - 进程与线程的区别[超详解]面试高频考题
- 操作系统 - 进程和内存
操作系统 - 进程和内存 操作系统内核和Shell 系统调用 进程管理 1. 进程控制块PCB 2. 进程的状态 3. 进程通信 3.1 共享存储 3.2 管道 Or 无名管道 3.3 有名管道 3. ...
- 操作系统——进程和线程的区别
操作系统--进程和线程的区别 最近学习了操作系统中的进程和线程这两个知识点,昨天老师给我们出了一道题:进程和线程的区别.听完题目后一脸懵逼,只想到了进程的一部分概念,回来之后就查书,找到了答案. 1. ...
- 【操作系统-进程】PV操作——吸烟者问题
文章目录 吸烟者问题 解题步骤 Step 1. 有几类进程 Step 2. 用中文描述动作 Step 3. 添加 PV 操作,用中文描述里面的操作 Step 4. 检查是否出现死锁 Step 5. 定 ...
- 考研—操作系统—进程管理
综述:何谓进程,进行中的程序,顾名思义,进程就是运行中的程序.即用户使用时的东西.所以进程是一种动态的概念,是只存在一段时间的过程概念.有着开始有着灭亡.进程可以称为是动态的程序.是程序实现功能时的投 ...
最新文章
- 少样本学习原理快速入门,并翻译《Free Lunch for Few-Shot Learning: Distribution Calibration》
- linux 下 gcc o2优化可能出现的问题
- 基于直方图的图像增强算法(HE、CLAHE、Retinex)
- JSONP的原理与实现(基于jQuery)
- rpg人物制作软件_新机制和随机性的完美结合!新RPG《元素梦境》参上
- ALGO-22 数的划分(DFS,经典剪枝)
- 回溯法——旅行售货员问题
- Gradle打包命令记录
- oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540
- mysql explain 结果值介绍
- 阶乘计算升级版 (20分)_求1!+2!+3!+...+20!的和
- 活动丨想和大咖云风来场1对1的亲面交流吗?!快来分享你的《程序员修炼之道》学习心得!
- 硬盘属于计算机的主存吗,.硬盘装在主机箱内,因此硬盘属于主存对吗
- STM32学习记录——MD300二维码扫描模块
- 网站受到流量攻击怎么办
- 怎样用c语言预测股票价格,如何根据时间和价格的波动来预测股票走势
- LeetCode 134. 加油站(C++)
- U盘无法格式化(提示U盘文件系统变为了RAW格式)【一般应用】
- 头牌知产介绍空气炸锅商标转让类别
- 【满分】【华为OD机试真题2023 JAVAJS】查找重复代码