C MPI-生产者和消费者
如何简单地制作生产者和消费者应用程序。生产者制作项目,将其发送给消费者,而消费者等待,直到他拥有该项目。他使用它,物品消失,他向制作人发送创建新物品的请求。一次又一次 我有一些MPI_发送和MPI_接收组合模式,但它只运行一次。生产者生产一件商品,消费者消费一件商品,应用程序陷入僵局。我应该使用非阻塞接收和发送吗C MPI-生产者和消费者,c,mpi,C,Mpi,如何简单地制作生产者和消费者应用程序。生产者制作项目,将其发送给消费者,而消费者等待,直到他拥有该项目。他使用它,物品消失,他向制作人发送创建新物品的请求。一次又一次 我有一些MPI_发送和MPI_接收组合模式,但它只运行一次。生产者生产一件商品,消费者消费一件商品,应用程序陷入僵局。我应该使用非阻塞接收和发送吗 int count=10; if(myrank==0){ //server for(i=0;i<10;i++){ MPI_Recv(&a,1,MPI_I
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();
}
}
您不应该为此需要非阻塞io。问题是没有任何东西会改变客户机状态,因此它永远不会收到任何东西。尝试:
else { //client
a=0;
for (i=0;i<10;i++) {
MPI_Send(&a,1,MPI_INT,0,99,MPI_COMM_WORLD);
do {
MPI_Recv(&a,1,MPI_INT,0,99,MPI_COMM_WORLD,&status);
} while (a != 1);
a=consumed();
}
MPI_Finalize();
}
else{//client
a=0;
对于(i=0;iThanks,但是当我将a=producted()移动到客户端时,不需要有两个进程,对吗?@Hmyzak这取决于您能否显示consumered()
和producted()
澄清一下吗?创建对象时它只返回1,使用对象时返回0。我只是想知道如何实现它,这两个进程到它们的作业-进程0负责生产,进程1负责消费。@Hmyzak我更新了答案以反映更新后的问题。
else { //client
a=0;
for (i=0;i<10;i++) {
MPI_Send(&a,1,MPI_INT,0,99,MPI_COMM_WORLD);
do {
MPI_Recv(&a,1,MPI_INT,0,99,MPI_COMM_WORLD,&status);
} while (a != 1);
a=consumed();
}
MPI_Finalize();
}