2012-03-13 8 views
0

[2] [3]にb [3] [4]を掛けて、c [2] [4]に答えを入れようとしています。 私はfork()を使って2つのプロセスを作り、c [0] [j]とc [1] [j]のそれぞれの子は親が待ちます。 したがって、各子プロセスは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/はいた瞬間フォークもし、あなたが2つの完全に独立したアドレス空間:)

一つの良い解決策を持つ2つの異なるプロセスを持っているが、スレッドの代わりにフォークを()を使用することです

+0

ありがとう、私はもう少し検索し、私のパイプは私の問題を解決すると思う。現時点でいくつか問題がありますが、私は試しています。あなたはパイプを理解するための簡単な例を知っていますか? – user1082307