吸烟者问题
问题描述

简单来讲就是说,供应者依次提供一组物品满足一个人吸烟的需求。
问题分析
同步关系:
- 桌子上没有物品->供应者轮流放材料;
- 桌子上有对应物品组->相应的吸烟者吸烟;
代码实现
sem table = 1;
sem g1 = 0; // 组1,对应第一个吸烟者,下面可以类比
sem g2 = 0;
sem g3 = 0;
sem mutex = 1;
void provider() {
while (1) {
if (i == 0) V(g1);
else if (i == 1) V(g2);
else if (i == 2) V(g3);
i = (i + 1) % 3;
P(table);
}
}
void smoker1() {
while (1) {
P(g1);
P(mutex);
...
V(mutex);
V(table);
}
}
void smoker2() {
while (1) {
P(g2);
P(mutex);
...
V(mutex);
V(table);
}
}
void smoker3() {
while (1) {
P(g3);
P(mutex);
...
V(mutex);
V(table);
}
}