fork ()을 사용하여 2 개의 2D 어레이 곱하기
-
13-12-2019 - |
문제
[2] [3]을 B [3] [4]로 곱하려고하고 C [2] [4]에 답변을 넣으려고합니다. 나는 fork ()를 사용하고 2 개의 프로세스를 사용해야합니다. 각 어린이는 C [0] [j]와 C [1] [J]를 위해 부모가 기다릴 것입니다. 따라서 각 어린이 프로세스는 c의 행을 계산합니다.이것은 내 코드입니다 :
//multiply a[2][3] * b[3][4] = c[2][4]
//with fork
//each child completes one c[2][4]'s row
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[2][3]={1,2,3,
4,5,6};
int b[3][4]={1,2,3,4,
5,6,7,8,
9,10,11,12};
int c[2][4];
int i,j;
int m; //for the calculation
int n; //common 3
int pid; //fork
for(i=0;i<2;i++)
{
pid=fork();
if(pid==-1)
{
printf("Can't fork\n");
}
if(pid==0)//child
{
for(j=0;j<4;j++)
{
for(n=0;n<3;n++)
{
m=m+a[i][n]*b[n][j];
}
c[i][j]=m;
m=0;
}
exit(EXIT_SUCCESS);
}
if(pid>0)//parent
{
wait(0);
}
}
printf("C:\n");
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",c[i][j]);
}
printf("\n");
}
}
.
컴 빌딩에 오류가 없지만 잘못된 숫자를 얻습니다 ... 어색한 큰 숫자 ... 어떤 아이디어도 있습니까?
해결책
Q : 컴파일에 오류가 없지만 잘못된 숫자를 얻습니다 ... 어색함 큰 숫자 ... 어떤 아이디어?
a : 예 - 포크를 포크하는 순간, 두 개의 완전히 독립적 인 주소 공간이있는 두 가지 다른 프로세스가 있습니다.)
하나의 좋은 해결책은 fork () 대신 스레드를 사용하는 것입니다.
제휴하지 않습니다 StackOverflow