1. 程式人生 > >通訊機制解決生產者消費者問題

通訊機制解決生產者消費者問題

                                   通訊機制解決生產者消費者問題實現高併發

生產者與消費者這類經典的同步問題可以有很多方式解決。

利用訊號量機制,利用管程機制解決問題。

今天來介紹一種新的解決生產者與消費者問題的方式--間接通訊機制。

先來看下程式碼實現。

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放在一個站點下。)