进程并发-信号量经典例题-吸烟者问题

1 题目描述

吸烟者问题

在一个房间内有三个吸烟者和一个香烟供应者。为了制造并抽掉香烟,每个吸烟者需要三样物品:烟草、纸和火柴,供应者有丰富物品提供。在三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。供应者随机地将两样不同的物品放在桌子上,允许一个吸烟者制造香烟并进行不利于健康的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再随机地把两样不同的物品放在桌子上,唤醒一个吸烟者。试用信号量的P、V操作设计该问题的同步算法,给出所用共享变量(如果需要)和信号量及其初始值,并说明各自的含义。

2 条件分析

题目需要满足的条件分析

1 这是一个同步问题,提供者一共可以提供三种可能的结果,每提供一种可能的物品,对应的吸烟者就可以准备开始制作抽烟了

2 吸烟者吸完烟后要告知提供者开始提供

3 伪代码

复制代码
1.end_smoking=1;//结束抽烟,开始发放物品  
2.offer_smoke_1=0;//为第一个吸烟者提供需要的物品  
3.offer_smoke_2=0;//为第二个吸烟者提供需要的物品  
4.offer_smoke_3=0;//为第三个吸烟者提供需要的物品  
5.  
6.  
7.provider()  
8.{  
9.    int rand;  
10.    while(1)  
11.    {  
12.        P(end_smoking);  
13.        rand=acquire_random();//获取一个0,1,2的随机数  
14.        if(rand==0)  
15.            V(offer_smoke_1); //第一个吸烟者可吸烟  
16.        else if(rand==1)  
17.            V(offer_smoke_2); //第二个吸烟者可吸烟  
18.        else  
19.            V(offer_smoke_3); //第三个吸烟者可吸烟  
20.    }  
21.}  
22.  
23.somker1()  
24.{  
25.    while(1)  
26.    {  
27.        P(offer_smoke_1); //判断是否提供了自己的需要的物品  
28.        make_and_smoke();  
29.        V(end_smoking);  
30.    }  
31.}  
32.somker2()  
33.{  
34.    while(1)  
35.    {  
36.        P(offer_smoke_2); //判断是否提供了自己的需要的物品  
37.        make_and_smoke();  
38.        V(end_smoking);  
39.    }  
40.}  
41.somker3()  
42.{  
43.    while(1)  
44.    {  
45.        P(offer_smoke_3); //判断是否提供了自己的需要的物品  
46.        make_and_smoke()  
47.        V(end_smoking);  
48.    }  
49.}  

系列文章如下

学习过程中一定要有系统观念(知识框架,每一章开头都会有一个思维导图),知道目前自己在学习的是哪一板块的内容,和前面有什么样的联系

操作系统的很多知识点前后都是联系非常紧密的,去一点一点理解而不是死记硬背会学习的非常愉快的!!!

操作系统相关文章

概述,初步了解操作系统功能及其一些概念

操作系统(一)| 概述 作业 批处理 OS运行环境要求 基本特征-CSDN博客

进程管理部分,重头戏

操作系统(二 )| 进程控制 进程状态 进程描述 进程控制 进程同步互斥-CSDN博客

操作系统(三)| 进程管理上 进程状态 同步 互斥-CSDN博客

操作系统(三)| 进程管理下 经典进程问题分析 线程 死锁-CSDN博客

内存管理部分

操作系统(四)| 内存管理 实存储器管理 虚拟存储器管理 分页 分段式管理-CSDN博客

文件系统管理部分

操作系统(五)| 文件系统上 结构 存取方式 文件目录 检索-CSDN博客

操作系统(六)| 文件系统下 文件使用 共享 保护-CSDN博客

设备管理部分

操作系统(七)| 设备管理-- 端口 驱动程序 基本I/O控制 磁盘I/O-CSDN博客


相关推荐
老赵聊算法、大模型备案14 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
CoderYanger15 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
厕所博士15 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新15 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
xu_yule16 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s090713616 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风16 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
子夜江寒16 小时前
逻辑回归简介
算法·机器学习·逻辑回归
软件算法开发16 小时前
基于ACO蚁群优化算法的多车辆含时间窗VRPTW问题求解matlab仿真
算法·matlab·aco·vrptw·蚁群优化·多车辆·时间窗
another heaven16 小时前
【软考 磁盘磁道访问时间】总容量等相关案例题型
linux·网络·算法·磁盘·磁道