//理发店里有一位理发师,一把理发椅和三把等候椅,编写程序协调顾客和理发师
int count=0;
//记录理发店里的顾客数
semaphore barber_chair=1;
// 理发椅一张
semaphore wait_chair=3;
//等待椅子三张
semaphore mutex=1;
//互斥地访问count的信号量
semaphore ready=0;
//准备好的可以理发的数量当成理发师所需要的资源
semaphore finish=0;
//理发师完成理发后发给顾客的信号量作为顾客的资源
Barber()
{
while(1)
{
wait(ready);
barbering;
signal(finish);
//告诉理发椅子上的顾客理发已经完成
}
}
Customer()
{
while(1)
{
wait(mutex);
if(count>=3)
{
signal(mutex);
leaving;
}
else{
count++;
signal(mutex);
}
wait(wait_chair);
wait(barber_chair);
signal(wait_chair);
signal(ready);
be barbered;
wait(finish);
//等待理发师剪完
signal(barber_chair);
//离开理发椅子
wait(mutex);
count--;
//更新店里的顾客数
signal(mutex);
}
}
int count=0;
//记录理发店里的顾客数
semaphore barber_chair=1;
// 理发椅一张
semaphore wait_chair=3;
//等待椅子三张
semaphore mutex=1;
//互斥地访问count的信号量
semaphore ready=0;
//准备好的可以理发的数量当成理发师所需要的资源
semaphore finish=0;
//理发师完成理发后发给顾客的信号量作为顾客的资源
Barber()
{
while(1)
{
wait(ready);
barbering;
signal(finish);
//告诉理发椅子上的顾客理发已经完成
}
}
Customer()
{
while(1)
{
wait(mutex);
if(count>=3)
{
signal(mutex);
leaving;
}
else{
count++;
signal(mutex);
}
wait(wait_chair);
wait(barber_chair);
signal(wait_chair);
signal(ready);
be barbered;
wait(finish);
//等待理发师剪完
signal(barber_chair);
//离开理发椅子
wait(mutex);
count--;
//更新店里的顾客数
signal(mutex);
}
}