【正确答案】
【答案解析】semaphore smoker[3];//初始0,三个抽烟者
semaphore material[3];//初始0,三种原料
semaphore agent;//初始1,供应商
int turn;//初始0,轮到谁
agent:
while(1) {
wait(agent);
signal(smoker[turn]);
signal(material[(turn+1)%3]);
signal(material[(turn+2)%3]);
turn=(turn+1)%3
}
smoker—i:
while(1) {
wait(smoker[i]);
wait(material[(i+1)%3]);
Wait(material[(i+2)%3]);
signal(agent);
}