как просто сделать приложение для производителя и потребителя. Производитель делает товар, отправляет его потребителю, а потребитель ждет, пока у него не появится этот товар. Он использует его, предмет пропал и отправляет запрос на создание нового производителю. И снова и снова.
У меня есть режим комбинации 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;
}