2012-03-13 90 views
0

)我試圖用b [3] [4]乘以[2] [3],並將答案放在c [2] [4]中。 我必須使用fork()併爲每個子c [0] [j]和c [1] [j]創建2個進程,父進程將等待。 所以每個子進程都會爲c計算一行。這是我的代碼:使用fork乘以2個2D數組(

//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

問:我在編譯時沒有錯誤,但是我弄錯了數字......尷尬 大數字......任何想法?

答:是的 - 那一刻你叉,你有兩個完全獨立的地址空間:)

一個很好的解決方案兩個不同的過程是使用線程而不是fork()的:

https://computing.llnl.gov/tutorials/pthreads/

+0

謝謝,我搜索了一些,我認爲管道將解決我的問題。目前有一些問題,但我正在嘗試。你知道一個簡單的例子來理解管道嗎? – user1082307 2012-03-14 00:27:11