2012-03-13 2 views
0

Я пытаюсь умножить [2] [3] на b [3] [4] и поставить ответ в c [2] [4]. Мне нужно использовать fork() и сделать 2 процесса, каждый ребенок для c [0] [j] и c [1] [j], родитель будет ждать. Итак, каждый дочерний процесс будет вычислять строку для c. Это мой код:умножение 2 2D-массивов с использованием fork()

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

В: У меня нет ошибок при компиляции, но я получаю неправильные цифры ... неудобно большие числа ... Любые идеи?

A: Да - момент вы вилка, у вас есть два различных процесса с двумя полностью независимыми адресными пространствами :)

Одно хорошее решение заключается в использовании темы вместо вилки():

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

+0

спасибо, я искал немного больше, и я думаю, что трубы решат мою проблему. У меня есть некоторые проблемы на данный момент, но я стараюсь. Вы знаете простой пример, чтобы понять трубку? – user1082307

Смежные вопросы