0
如何簡單地製作生產者和消費者應用程序。生產者製作項目,將其發送給消費者,同時消費者等待,直到他擁有此項目。他使用它,項目不見了,他發送請求給製作人創建一個新的。再重複一遍。MPI - 生產者和消費者
我有模式一些MPI_send和MPI_recv的組合,但它只是只去一次。生產者製作一個項目,消費者消費一個項目,應用程序被鎖定。我應該使用非阻塞接收和發送?
int count=10;
if(myrank==0){ //server
for(i=0;i<10;i++){
MPI_Recv(&a,1,MPI_INT,1,99,MPI_COMM_WORLD,&status);
if (a==0){
a=produced(); //here it returns 1
MPI_Send(&a,1,MPI_INT,1,99,MPI_COMM_WORLD);
}
}
}
else{//client
for(i=0;i<10;i++){
if(a==0){
a=0;
MPI_Send(&a,1,MPI_INT,0,99,MPI_COMM_WORLD);
}else{
MPI_Recv(&a,1,MPI_INT,0,99,MPI_COMM_WORLD,&status);
a=consumed();
n++;
}
if(n==count){
MPI_Finalize();
}
}
}
編輯:
int produced(){
sleep(1);
printf("Produced item\n");
return 1;
}
int consumed(){
sleep(1);
printf("Consumed item\n");
return 0;
}
由於源代碼,但是當我移動一個=產生()到客戶端,沒有必要爲具有2個進程,是嗎? – Waypoint 2011-03-26 08:45:11
@Hmyzak它取決於你可以顯示'消耗()'和'生產()'澄清? – 2011-03-26 09:30:00
它僅在創建對象時返回1,在消耗時爲0。我只是想知道如何以這種方式實現它,這兩個過程到他們的工作流程0負責生產,並且流程1負責消費。 – Waypoint 2011-03-26 09:30:50