吸烟者问题——进程同步
一、问题描述:
某系统有三个吸烟者进程和一个经销商进程:
- 每个吸烟者连续不断做烟卷并抽他做好的烟卷,做一支烟卷需要烟草、纸、火柴三种原料,这3个吸烟者分别掌握有烟草、纸和火柴;
- 经销商源源不断地提供上述三种原料,但他只将其中的两种原料放在桌上,具有另一种原料的吸烟者就可做烟卷并抽烟,且在做完后给经销商发信号,然后经销商再拿出两种原料放在桌上,如此反复。
- 试设计一个同步算法来描述他们的活动。
二、问题分析
吸烟者问题是经典的进程同步问题,其特点在于信号量的设置,本题的关键问题是判断有几个临界资源。烟草、纸和火柴三种原料并不能简单地看成是三种临界资源,因为它们并不是以单独的形式被三个吸烟者进程所竞争,而是以固定的组合被三个进程所申请因此可以考虑如下设置:
- 三个信号量t1、t2和t3分别代表三种原料组合,即t1表示烟草和纸的组合信号量,t2表示烟草和火柴的组合信号量,t3表示纸和火柴的组合信号量,初值均为0。
- 经销商一次只能提供一种组合,可以看作是放一个产品的缓冲区,资源量为一个组合,于是我们设置缓冲区的资源信号量为s,初值为1。由于该资源量为1,故可以同时作为互斥量来使用,可以省略对缓冲区操作的互斥信号量。
本题还有一个特点就是经销商在提供原料时是随机的,预先并不知道经销商会放什么原料,只有在提供以后才知道,所以在对信号量操作时必须预先搞清楚到底是放了什么原料的组合,再对相应的信号量操作。这个过程在经销商进程中有所体现。
因此简化分析:
1)三个吸烟者和一个经销商,三个吸烟者各自拥有的材料不同,可以吸烟的条件不一样,具体看经销商往桌子上放的原料
2)每个吸烟者都需要一个进程(为烟草拥有者进程、纸拥有者进程、火柴拥有者进程)分别和经销商进程进行同步
3)互斥资源:桌子;
吸烟者问题——进程同步相关推荐
- 2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
文章目录 0.前言 1.生产者-消费者问题 (1)问题描述 (2)问题分析 (3)如何实现? (4)实现互斥的P操作一定要在实现同步的P操作之后 (5)知识回顾与重要考点 2.多生产者-多消费者问题 ...
- 经典进程同步问题——吸烟者问题
吸烟者问题是为了解决"可以生产多个产品的单生产者"问题提供了一个思路. 问题描述:有三个抽烟者和一个供应者.每个抽烟者不停地卷烟抽,组成一根烟需要三种材料:烟草.纸和胶水.三个抽烟 ...
- 进程同步互斥问题3——吸烟者问题
- java同步互斥功能检测_猿考研之操作系统篇三(进程同步,管程,死锁)
进程同步 进程具有异步性的特征.异步性是指,各并发执行的进程以各自独立的.不可预知的速度向前推进. 同步机制应遵循的准则 空闲让进:其他进程均不处于临界区: 忙则等待:已有进程处于其临界区: 有限等待 ...
- 操作系统:第二章 进程管理3 - 进程同步与互斥
本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...
- 操作系统【一】进程同步和信号量
基本概念 进程异步性特征:各并发执行的进程以各自独立的,不可预知的速度向前推进. 进程同步又称作直接制约关系,他是指为完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作顺 ...
- 进程同步(操作系统)
2.9 进程同步的基本概念:临界资源.同步和互斥 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系.为了协调进程之间的相互制约关系,引入了进程同步的概念. 临界资源 虽然多个进 ...
- 【操作系统基础】进程管理(三)进程同步与互斥
一.进程同步.互斥的基本概念 1. 什么是进程同步 进程具有异步性的特征.异步性是指各并发执行的进程以各自独立的.不可预知的速度向前推进.举一个线程通信的例子,管道通信: 读进程和写进程并发运行,由于 ...
- 操作系统-吸烟者问题(C++信号量实现)
三个吸烟者在一个房间内,有一个香烟供应商.为了制造并抽烟,每个吸烟者必须具备:烟草.纸和火柴. 三个吸烟者中,第一个有烟草,第二个有纸,第三个有火柴.供应者有丰富的货物, 随机将两样东 ...
最新文章
- kaggle删除自己的数据集
- 数据结构----归并排序
- sqltype java_【SQL参考】SQL数据类型与JAVA中type的对应
- CommandLineToArgvW
- 简述 Java 垃圾回收机制
- GridView日期列使用DataFormatString格式化技巧
- echarts 地图增加背景图
- 什么是Apple Pay?
- matlab besselh,关于用matlab求bessel函数零点
- 生化环材四大天坑劝退指南
- Delphi XE10让android的界面设计摆脱繁杂
- 对话冉小波:NULS三年来的实战心得与反思 |链捕手
- 三星S6D1121主控彩屏(240*320*18bit,262K)驱动程序
- JAVA之socket编程服务器与客户端通信--实现简易聊天室
- linux系统下以存储从大到小并以K,M,G为单位的方式查看当前目录下的文件信息
- 从零开始写JavaScript框架(一)
- 从零开始:AE二次开发中获取A点到B点的最佳路径(3)
- 如何用海思HI3516DV300/3518EV200推流H.264
- CTF-RSA1(已知p、q、dp、dq、c)
- FreeBSD使用CVSup升级Ports,让它涣然一新