生产者和消费者问题变式--产品入库

问题描述

在一个仓库中可以存放A和B两种产品,要求如下:

(1)每次只能存入一种产品。

(2)A产品的数量 - B产品的数量  < M.

(3)B产品的数量 - A产品的数量  < N.

其中,M、N是正整数,试用P、V操作描述产品A与产品B的入库过程。

问题分析 

1.仓库是一种临界资源,需要互斥访问;

2.产品A和产品B之间有同步关系:当A的数量-B的数量>= M时,进程A就会被阻塞;B的数量-A的数量>=N,进程B就会被阻塞。

代码

semaphore mutex = 1;	//对仓库的互斥访问
semaphore A = M-1;
semaphore B = N-1;
PA(){
	while(true){
		准备A产品;
		P(A);
		P(mutex);
		放入A产品;
		V(mutex);
		V(B);    //放入一件A产品,B可以放入仓库的数目就增加一
	}
}

PB(){
	while(true){
		准备B产品;
		P(B);
		P(mutex);
		放入A产品;
		V(mutex);
		V(A);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值