问答题 面包师有很多面包,由n个销售人员推销。每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。【北京航空航天大学2001年】
【正确答案】正确答案:顾客进店后按序取号,并等待叫号;销售人员空闲之后也是按序叫号,并销售面包。因此同步算法只要对顾客取号和销售人员叫号进行合理的同步即可。我们使用两个变量i和j分别记录当前的取号值和叫号值,并各自使用一个互斥信号量用于对i和j的访问和修改。 int i=0,j=0; semaphore mutex—i=1,mutex—j=1; //顾客 Consumer() { 进入面包店; P(mutex—i); 取号i; i++; V(mutex—i), 等待叫号i并购买面包; } //销售人员 Seller() { while(1) { P(mutex—j); if(J
【答案解析】