Moltiplicare 2 array 2D usando forchetta ()
-
13-12-2019 - |
Domanda
Sto cercando di moltiplicare un [2] [3] con B [3] [4] e mettere la risposta in C [2] [4]. Devo usare forchetta () e fare 2 processi, ogni bambino per C [0] [J] e C [1] [J], il genitore attenderà. Quindi ogni processo figlio calcolerà una riga per c.Questo è il mio codice:
//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");
}
}
.
Non ho errori alla compilazione, ma ottengo numeri sbagliati ... grandi numeri grandi ... Qualche idea?
Soluzione
.D: Non ho errori alla compilazione, ma ottengo numeri sbagliati ... Awkward Grandi numeri ... qualsiasi idea?
A: Sì: il momento della forchetta, hai due diversi processi con due spazi di indirizzi completamente indipendenti :)
Una buona soluzione è usare fili anziché forchetta ():
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow