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;
}
감사에 대한 소스 코드를 반영하도록 변경,하지만 난 이동할 때 = 클라이언트에() 생산,이 개 과정을 할 필요는 내가 맞다, 없다? – Waypoint
@Hmyzak 명확히하기 위해'consumed()'와'produced()'를 보여줄 수 있습니까? –
객체를 만들면 1을 반환하고 소비되면 0을 반환합니다. 두 가지 프로세스, 즉 프로세스 0은 생산을 담당하고 프로세스 1은 소비를 처리하는 방법을 궁금합니다. – Waypoint