首页 > 试题广场 >

面包店有3 个售货员,每个顾客进店后先获得一个号码,等待叫到

[问答题]
面包店有3 个售货员,每个顾客进店后先获得一个号码,等待叫到自己的号码时才能购
买面包,售货员空闲时就叫下一个号码,如果没有顾客则休息片刻之后再看是否有顾客取了号码,
无需顾客唤醒售货员。(1)系统中最少有多少个进程?(2)请设计一个同步算法。
(1)该问题中每个售货员都是一个进程,每个顾客也是一个进程,当没有顾客的时候,系统中的进
程数量最少,有3 个售货员进程。(1 分)
(2)该问题中的临界资源是当前取到的号码get 和当前叫到的号码call。多个售货员都要访问叫的
号码,所以要互斥;顾客取号码必须互斥。
int get=0, call=0;
semaphore mutex_get=1, mutex_call=1; //信号量和临界资源(2 分)
Seller(){
while(1){
wait(mutex_call);
if(call<get){
叫号码call;
call++;
signal(mutex_call);
销售面包;
} else {
signal(mutex_call);
休息片刻; //一段时间的延迟,无需顾客唤醒。
}
}
}//售货员进程(3 分)
Customer(){
进入面包店;
wait(mutex_get);
取号码;
get++;
signal(mutex_call);
等待叫号购买面包;
} //顾客进程(2 分)
发表于 2017-05-16 20:59:00 回复(0)