面包师问题--进程同步问题

面包师问题

一、问题描述:
面包师有很多面包和蛋糕,由 n 个销售人员销售。
每个顾客进店后先取一个号,并且等着叫号。
当一个销售人员空闲下来,就叫下一个号。
请分别编写销售人员和顾客进程的程序。

二、程序实现
由于取号和叫号都属于临界资源,所以用2个互斥信号量来进行表示.

semaphore mutex_c = 1; //控制取号的互斥访问
semaphore mutex_s = 1; //控制
semaphore count_c = 0; //顾客取得的号数
semaphore count_s = 0; //销售人员呼叫的号数
semaphore sale = n; //销售人员数
semaphore customer = 0; //顾客数

void Customer() {
	P(mutex_c); //申请访问取号资源
	count_c++; //获得号码
	V(mutex_c) //释放资源
	V(customer);
	P(sale); //等待销售人员
	进行消费,然后离开;
}

void Sale() {
	P(customer); //等待顾客
	P(mutex_s); //申请叫号资源
	count_s++; 
	呼叫号码为 count_s 的顾客;
	V(mutex_s); //释放资源
	V(sale);
}
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值