考研复习(12)-理发师问题

//理发店里有一位理发师,一把理发椅和三把等候椅,编写程序协调顾客和理发师
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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值