2012-03-13 5 views
0

[2] [3]에 b [3] [4]를 곱하고 c [2] [4]에 답을 넣으려고합니다. 나는 fork()를 사용하고 c [0] [j]와 c [1] [j]에 대해 각 자식 2 프로세스를 만들어야 만 부모가 기다릴 것이다. 그래서 각 자식 프로세스는 c에 대한 행을 계산합니다.fork()를 사용하여 2 차원 배열을 곱하면

//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"); 
    }   
} 

내가 컴파일에서 오류가없는,하지만 난 잘못된 번호 ... 어색 큰 숫자를 얻을 수 ... 어떤 아이디어 : 이것은 내 코드?

답변

0

Q : 컴파일시 오류가 없지만 잘못된 번호가 표시됩니다 ... 어색함 큰 숫자가 있습니까?

A : - :

https://computing.llnl.gov/tutorials/pthreads/ 예 순간 포크 당신, 당신은 두 개의 완전히 독립적 인 주소 공간 :

하나 개의 좋은 솔루션으로 두 개의 서로 다른 프로세스가 스레드 대신 포크()를 사용하는 것입니다

+0

덕분에 좀 더 검색했고 파이프가 내 문제를 해결할 것이라고 생각합니다. 잠시 동안 몇 가지 문제가 있지만 노력하고 있습니다. 파이프를 이해하는 쉬운 예를 알고 있습니까? – user1082307