【发布时间】:2011-07-23 09:25:10
【问题描述】:
如何简单地制作一个生产者和消费者应用程序。生产者制作物品,将其发送给消费者,而消费者等待直到他拥有该物品。他使用它,项目不见了,他向生产者发送创建新项目的请求。再来一遍。
我有一些 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;
}
【问题讨论】: