理发师问题
7.8 The Sleeping-Barber Problem. A barbershop consists of a waiting room with n chairs and the barber room containing the barber chair. If there are no customers to be served,the barber goes to sleep. If a customer enters the barbershop and all chairs are occupied, then the customer leaves the shop.If the barber is busy but chairs are available, then the customer sits in one of the free chairs. If the barber is asleep, the customer wakes up the barber. Write a program to coordinate the barber and the customers.semaphore:
full:=0,empty:=n,mutex:=1;//刘军的写法
/*
*full表示当前需要理发的人数
*empty表示当前还剩下多少空椅子
*mutex进程互斥控制量,理发师一次只能给一个人理发
*/
Parbegin:
customer: repeat
if empty=0:
customer leaves the shop//没有空位置则离开
P(empty);
P(mutex);
add a customer to chair
V(mutex);
V(full);
until false;
barber: repeat
if full=0:
barber sleep;//没有人需要理发则睡觉
P(full);
P(mutex);
cutting hair
V(mutex);
V(empty);
until false;
Parend;
生产者消费者
|
读者写者
|
哲学家问题
|