PV原理操作之生产者消费者

缓冲区大小为k

semaphore mutex=1;//in,out的互斥变量
semaphore empty=k; //可用的缓冲区大小
semaphore full=0;  //已占用的缓冲区的大小
semaphore buff[k];//缓冲区
int in=0, out=0;// 写 读指针

producer(){	
	while(true){
		p(empty);
		p(mutex);//进入临界区
		input->buff[in];
		in=(in+1)%k;
		v(mutex);//出临界区
		v(full);
	}
}

consumer(){
	while(true){
		p(full);
		p(mutex);
		take from buff[out];
		out=(out+1)%k;
		v(mutex);
		v(empty);
	}
}


p(empty)和p(mutex)不可以互换,如果互换,当empty=0,先p(mutex),再p(empty),进程会进入阻塞,由于没有释放mutex,使消费者也处于阻塞状态。
可以用一句话理解。当缓冲区没地方的时候,不能让他再获得使用缓冲区的权利。
其实mutex是为了消费者和消费者 , 生产者和生产者之间的互斥,因此可以使用两个mutex1, mutex2使并发程度更高一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值