“吸烟者”问题
问题描述
- 问题描述
- 问题分析
-
- 关系分析
- 求解思路
- 信号量设置
- 问题解决
- Java实现
存在三个抽烟者和一个供应者。 每个抽烟者不停地卷烟并抽烟,烟有三种原材料:烟草、烟纸、胶水。 三个抽烟者中,第一个拥有烟草,第二个拥有烟纸,第三个拥有胶水。 供应者不断地随机供应这三种原材料,每次提供两种原材料到桌子上,能卷好烟的抽烟者会卷烟并抽烟,结束后供应者继续提供新的原材料……
问题分析 关系分析形成的是一个三人轮流抽烟的情况,由于限制了必须能卷好烟的人才能拿走材料,所以避免了死锁。
供应者与三个抽烟者之间分别是同步的关系。 三个抽烟者对抽烟这个动作是互斥的。
求解思路设置四个进程,一个供应者,三个不同的抽烟者。
信号量设置需要4个信号量:
- offer1:对应烟草和纸组合的资源
- offer2:对应烟草和胶水组合的资源