第2章补充习题().docVIP

  • 19
  • 0
  • 约5.63千字
  • 约 10页
  • 2018-08-06 发布于江苏
  • 举报
第2章补充习题()

例:抽烟问题:有一个烟草代理商(Agent)和3个抽烟者(smoker)。每个抽烟者连续不断地制造香烟并吸掉它。但是,制造一支香烟需要三种材料:烟草、烟纸和火柴。三个抽烟者中,一人有烟纸,一人有烟叶,一人有火柴。烟草代理商源源不断地供应这三种材料。他将两种材料一起放在桌上,持有另一种材料的吸烟者即可制造一支香烟并抽掉它。当此抽烟者抽香烟时,他发出一个信号通知烟草代理商,烟草代理商马上给出另外两种材料,如此循环往复。试用信号量同步烟草代理商和3个抽烟者。 解: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]); wa

文档评论(0)

1亿VIP精品文档

相关文档