【正确答案】
【答案解析】(此题与爸爸放苹果和桔子,女儿取桔子,儿子取苹果一题类似。)设置四个信号量empty一1表示桌子是否为空,yan=0表示是否能满足有烟草者的需要,zhi=0表示是否能满足有纸者的需要,huo=0表示是否能满足有火柴者的需要。
有烟草者: { 拿走纸和火柴; 做烟;
while(1) P(yan); V(empty); 抽烟;
} 抽烟; 做烟; then V(yan)
} 抽烟; else if放烟草和火柴
}
then V(zhi)
else if放烟草和纸
有纸者:
while(1) 有火柴者:
{ while(1) 经销商: then V(huo);
P(zhi); { while(1) }
拿走烟草和火柴; P(huo); {
V(empty); 拿走烟草和纸; P(empty);
做烟; V(empty); if放纸和火柴