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

操作系统 专栏收录该内容
3 篇文章 0 订阅

面包师问题

一、问题描述:
面包师有很多面包和蛋糕,由 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);
}
  • 5
    点赞
  • 2
    评论
  • 13
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值