通讯机制解决生产者消费者问题

                                   通讯机制解决生产者消费者问题实现高并发

生产者与消费者这类经典的同步问题可以有很多方式解决。

利用信号量机制,利用管程机制解决问题。

今天来介绍一种新的解决生产者与消费者问题的方式--间接通讯机制。

先来看下代码实现。

package MM;

public class receive {
	producer(){
		message pmsg;						//生产者产生的产品。
		while(1) {
			receive(token,pmsg);			//token是生产者的缓冲区。接收是否缓冲区内有空间
			pmsg=produce();
			send(buffer,msg);				//buffer是消费者的缓冲区。
		}
	}
	consumer(){
		message cmsg;						//消费者消费的产品。
		while(1) {
			receive(buffer,cmsg);			//buffer是消费者的缓冲区。接收是否缓冲区内有产品。
			cmsg=consume();
			send(token,null);				//token是消费者的缓冲区。
		}
	}
	const int capacity=n;					//两个缓冲区公共长度。
	main(){
		create mailbox(token);
		create mailbox(buffer);
		for(int i=0;i<capacity;i++) {
			send(token,null);				//消费完缓冲区的产品
		}
		cobegin(proocucer,consumer);
	}
}

相对于其他两种方式的特点:

1同步和通信同时实现

2多个产生者和消费者可以同时访问临界资源(邮箱)。从而实现高并发。

3因为具有两个缓冲区来实现同步,所以可以应用于分布式环境(生产者和token放在一个站点下,消费者和buffer放在一个站点下。)

猜你喜欢

转载自blog.csdn.net/qq_43279637/article/details/83580992