文章目录
- 概述
- 问题分析
- 如何实现
- 小结
概述
操作系统中的吸烟者问题是一个经典的同步问题,它涉及到进程间的同步和互斥。
在这个问题中,有三个抽烟者进程和一个供应者进程。每个抽烟者需要三种材料:烟草、纸和胶水来完成吸烟的操作。三个抽烟者分别拥有这三种材料中的一种。供应者进程负责提供这三种材料,但每次只能提供两种,而且供应者需要等待一个吸烟者完成吸烟并发出信号后才能继续提供下一组材料。这个问题的关键在于如何协调供应者和吸烟者之间的动作,以确保每个吸烟者都能得到所需的材料,并且按照正确的顺序进行吸烟。
为了解决这个问题,可以设置信号量来控制进程间的同步和互斥。具体来说,可以设置三个信号量offer1、offer2和offer3,分别表示烟草和纸、烟草和胶水、纸和胶水的组合资源。还需要一个信号量finish用于同步吸烟者和供应者进程,供应者需要等待一个吸烟者吸完烟,再提供下一个资源,吸烟者要通过finish信号量告诉供应商,我已经吸完烟了。
总的来说,这个问题的解决方案涉及到操作系统中的生产者-消费者问题,以及信号量和P、V操作的使用。通过合理地设计信号量和使用P、V操作,可以实现进程间的有效同步,确保每个进程都能按照既定的顺序执行,避免竞争条件和死锁的发生。这个问题的解决对于理解和掌握操作系统中的并发控制和进程同步机制非常重要。
问题分析
将两种材料抽象一种组合
由于各个信号变量最多只有一个为1,所以不需要互斥变量
如何实现
通过循环实现均匀提供组合
不需要互斥信号量
小结
随机不等于轮流
轮流通过循环的方式
随机通过随机函数的生成的随机变量
V操作放到事件发送后的位置即将组合放到桌子上然后再进行V操作