int waiting = 0;
int chair = n; //常量 这个应定义为数值类型而非信号量,否则当waiting > chair时,就会阻塞在该信号量上,也就是不会因椅子不够而离开,而是等着有空位置。
semaphore consumer = 0;
semaphore mutex = 1; //对waiting互斥
semaphore barber = 1; //感觉这个信号量可有可无,或许是体现题目中所说“叫醒理发师”动作
------------------------------------------------------------------------------------------------------
process consumer(){
while(1){
p(mutex);
if(waiting <= chair){
waiting++;
v(consumer);
v(mutex);
p(barber);
理发师理发;
}else{
离开;
v(mutex);
}
}
}
process barber(){
while(1){
p(consumer);
p(mutex);
waiting--;
v(barber);
v(mutex);
理发师理发;
}
}
理发师问题
于 2022-12-02 16:54:40 首次发布