一、问题描述:

某系统有三个吸烟者进程和一个经销商进程:

  • 每个吸烟者连续不断做烟卷并抽他做好的烟卷,做一支烟卷需要烟草、纸、火柴三种原料,这3个吸烟者分别掌握有烟草、纸和火柴;
  • 经销商源源不断地提供上述三种原料,但他只将其中的两种原料放在桌上,具有另一种原料的吸烟者就可做烟卷并抽烟,且在做完后给经销商发信号,然后经销商再拿出两种原料放在桌上,如此反复。
  • 试设计一个同步算法来描述他们的活动。

二、问题分析

吸烟者问题是经典的进程同步问题,其特点在于信号量的设置,本题的关键问题是判断有几个临界资源。烟草、纸和火柴三种原料并不能简单地看成是三种临界资源,因为它们并不是以单独的形式被三个吸烟者进程所竞争,而是以固定的组合被三个进程所申请因此可以考虑如下设置:

  • 三个信号量t1、t2和t3分别代表三种原料组合,即t1表示烟草和纸的组合信号量,t2表示烟草和火柴的组合信号量,t3表示纸和火柴的组合信号量,初值均为0。
  • 经销商一次只能提供一种组合,可以看作是放一个产品的缓冲区,资源量为一个组合,于是我们设置缓冲区的资源信号量为s,初值为1。由于该资源量为1,故可以同时作为互斥量来使用,可以省略对缓冲区操作的互斥信号量。

本题还有一个特点就是经销商在提供原料时是随机的,预先并不知道经销商会放什么原料,只有在提供以后才知道,所以在对信号量操作时必须预先搞清楚到底是放了什么原料的组合,再对相应的信号量操作。这个过程在经销商进程中有所体现。

因此简化分析:

1)三个吸烟者和一个经销商,三个吸烟者各自拥有的材料不同,可以吸烟的条件不一样,具体看经销商往桌子上放的原料

2)每个吸烟者都需要一个进程(为烟草拥有者进程、纸拥有者进程、火柴拥有者进程)分别和经销商进程进行同步

3)互斥资源:桌子;

吸烟者问题——进程同步相关推荐

  1. 2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)

    文章目录 0.前言 1.生产者-消费者问题 (1)问题描述 (2)问题分析 (3)如何实现? (4)实现互斥的P操作一定要在实现同步的P操作之后 (5)知识回顾与重要考点 2.多生产者-多消费者问题 ...

  2. 经典进程同步问题——吸烟者问题

    吸烟者问题是为了解决"可以生产多个产品的单生产者"问题提供了一个思路. 问题描述:有三个抽烟者和一个供应者.每个抽烟者不停地卷烟抽,组成一根烟需要三种材料:烟草.纸和胶水.三个抽烟 ...

  3. 进程同步互斥问题3——吸烟者问题

     

  4. java同步互斥功能检测_猿考研之操作系统篇三(进程同步,管程,死锁)

    进程同步 进程具有异步性的特征.异步性是指,各并发执行的进程以各自独立的.不可预知的速度向前推进. 同步机制应遵循的准则 空闲让进:其他进程均不处于临界区: 忙则等待:已有进程处于其临界区: 有限等待 ...

  5. 操作系统:第二章 进程管理3 - 进程同步与互斥

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

  6. 操作系统【一】进程同步和信号量

    基本概念 进程异步性特征:各并发执行的进程以各自独立的,不可预知的速度向前推进. 进程同步又称作直接制约关系,他是指为完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作顺 ...

  7. 进程同步(操作系统)

    2.9 进程同步的基本概念:临界资源.同步和互斥 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系.为了协调进程之间的相互制约关系,引入了进程同步的概念. 临界资源 虽然多个进 ...

  8. 【操作系统基础】进程管理(三)进程同步与互斥

    一.进程同步.互斥的基本概念 1. 什么是进程同步 进程具有异步性的特征.异步性是指各并发执行的进程以各自独立的.不可预知的速度向前推进.举一个线程通信的例子,管道通信: 读进程和写进程并发运行,由于 ...

  9. 操作系统-吸烟者问题(C++信号量实现)

    三个吸烟者在一个房间内,有一个香烟供应商.为了制造并抽烟,每个吸烟者必须具备:烟草.纸和火柴.     三个吸烟者中,第一个有烟草,第二个有纸,第三个有火柴.供应者有丰富的货物,     随机将两样东 ...

最新文章

  1. kaggle删除自己的数据集
  2. 数据结构----归并排序
  3. sqltype java_【SQL参考】SQL数据类型与JAVA中type的对应
  4. CommandLineToArgvW
  5. 简述 Java 垃圾回收机制
  6. GridView日期列使用DataFormatString格式化技巧
  7. echarts 地图增加背景图
  8. 什么是Apple Pay?
  9. matlab besselh,关于用matlab求bessel函数零点
  10. 生化环材四大天坑劝退指南
  11. Delphi XE10让android的界面设计摆脱繁杂
  12. 对话冉小波:NULS三年来的实战心得与反思 |链捕手
  13. 三星S6D1121主控彩屏(240*320*18bit,262K)驱动程序
  14. JAVA之socket编程服务器与客户端通信--实现简易聊天室
  15. linux系统下以存储从大到小并以K,M,G为单位的方式查看当前目录下的文件信息
  16. 从零开始写JavaScript框架(一)
  17. 从零开始:AE二次开发中获取A点到B点的最佳路径(3)
  18. 如何用海思HI3516DV300/3518EV200推流H.264
  19. CTF-RSA1(已知p、q、dp、dq、c)
  20. FreeBSD使用CVSup升级Ports,让它涣然一新

热门文章

  1. 利用相对性原理推导Lorentz变换
  2. 小蚁正式发布双目VR全景相机,便宜、高像素只售2499元。
  3. ZZULIOJ 1788 小金刚的宝藏 (01背包)
  4. 风能matlab仿真_风能产量预测—深度学习项目
  5. 丙烯的精制工艺及在线监测
  6. 唤醒时间过长 Android,关于android:功耗问题之过多唤醒源-wakeups
  7. 测试中使用SecureCRT的经验归纳
  8. Java String compareToIgnoreCase() 方法
  9. Linux NTP时钟同步
  10. 运算符与基本数据类型int和string的方法汇总(二)