2016-05-09 14 views
0

Ich möchte eine Matrix für einen int-Wert als Argument übergeben, und ich möchte es mit Gabel tun. Es soll mehrere Zeilen gleichzeitig suchen (jedes Kind wird eine andere Zeile suchen. Wie auch immer ich ein Kind suche die erste Zeile, dann ein anderes Kind sucht die zweite Zeile, und so weiter, aber Sie tun es nicht gleichzeitig. Das zweite Kind wartet darauf, dass der Erste seine Suche beendet, bevor er anfängt. Ich schätze, ich benutze nicht, wie ich sein sollte. Hier ist mein Code bis jetzt:Finden Sie die Nummer in Matrix mit Gabel

..
int main(int argc, char **argv){ 

int p,i,j,val,status; 
int mat[6][100]; 

//matrix 
for(i=0;i<6;i++){ 
    for(j=0;j<100;j++){ 
     mat[i][j]=5; 
    } 
} 
mat[1][96]=2; 


if (argc<2) { 
    printf("Insert num\n"); 
    exit(-1); 
} 


val=atoi(argv[1]); 

for(i=0;i<6;i++){ 
    p=fork(); 
    if (p==0){ 
     for(j=0;j<100;j++){ 
      printf("n:[%d][%d] -> pID: %d, ppID: %d\n",i,j,getpid(),getppid()); //This line is to see how my search is being done. 
      if (mat[i][j]==val){ 
       printf("Found at line %d, Column %d\n",i,j); 
       _exit(i); 
      } 
     } 
    } 
    else{ 
     wait(&status); 
     exit(i); 

    } 
} 
return 0; 
} 

Dank

Antwort

1

Sie werden außerhalb der Schleife warten wollen Andernfalls werden die Prozesse seriell laufen So etwas wie das funktionieren sollte.

for(int i = 0; i < 6; i++) 
{ 
    switch(fork()) 
    { 
     case 0: /* child */ 
      /* Search */ 
      for(j = 0; j < 100; j++) 
      { 
       printf("n:[%d][%d] -> pID: %d, ppID: %d\n",i,j,getpid(),getppid()); 

       if (mat[i][j] == val) 
       { 
        printf("Found at line %d, Column %d\n", i, j); 
        _exit(i); 
       } 
      } 
      exit(0); 
     case -1: 
      perror("fork"); 
      exit(1); 
     default: /* parent */ 
      /* do stuff, but don't wait() or terminate */ 
    } 
} 

/* Wait for children */ 
for(i = 0; i < 6; i++) 
{ 
    wait(&status); 
    /* Handle status */ 
} 
+0

Ahh, ok! Danke für die Hilfe ! – ohiohai