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