So bekam ich ein Programm, das und Matrix mit zufälligen Ints erzeugt, und da eine Reihe es im Innern sucht und gibt die Ergebnisse, wenn seine dort irgendwo.Fork() und for - wieder in die for?
ich will Gabeln schaffen, in paralel in der Matrix zu suchen, everyhing funktioniert, aber die für das schafft die Gabeln(), um die Ergebnisse zu wiederholen.
Ich habe einige printfs setzen zu überprüfen, was passiert und was ich konnte, war, dass der übergeordnete Prozess und die Kinder, die Zyklen wurden Wiederholung (und damit die Ergebnisse zu wiederholen).
Warum passiert das?
#include <stdio.h>
#include <unistd.h> /* chamadas ao sistema: defs e decls essenciais */
#include <sys/wait.h> /* chamadas wait*() e macros relacionadas */
#include <stdlib.h> /* random */
#include <time.h> // para rand();
int main(int argc, char *argv[]) {
int num,i,j,z;
int linhas=4, colunas=10;
int pid[linhas];
int matriz[linhas][colunas];
srand((unsigned)time(NULL)); //random seed
if (argc < 2) { printf("FNumber to search is missing use:\n ./%s number\n",argv[0]); exit(1);}
num = atoi(argv[1]);
//create random matrix
for (i = 0; i<linhas; i++) {
printf("\n");
for (j = 0; j<colunas; j++) {
matriz[i][j] = rand()%50+1; //matrix with randoms from 1-50
printf("%i\t",matriz[i][j]);
}
}
printf("\n\nSearch Results:\n");
//create paralell process to search matrix
printf("\n");
for (i=0;i<linhas;i++) {
pid[i] = fork();
if (pid[i] == 0) {
for(z=0;z<colunas;z++) {
if (matriz[i][z] == num) { printf("Found %i at matriz[%i][%i]\n",num,i,z); }
}
}
else { wait(NULL); }
}
return 0;
}
'if (pid [i] == 0)' Das ist das Kind Code richtig? Was macht es nach dem Ausführen des Codes in diesem Block? Was ist die nächste Codezeile, die das Kind ausführt? Gleiches für den Elterncode - was wird der Elternteil nach dem 'else' Block ausführen? – kaylum
Welcher Mechanismus hat erwartet, dass der Child-Prozess die "for" -Schleife nicht weiter durchlaufen kann? – Dolda2000
Vielleicht habe ich mich nicht richtig ausgedrückt. @kaylum das Kind wird die for-Schleife ausführen, dass das, was ich will es tun, wird der übergeordnete Prozess warten(), bis all Prozess beenden Kindes. Das ist was ich will. aber wenn ich es teste, schleift es den für Zyklus öfter als es sollte. (Wiederholen Sie die Ergebnisse mit dem gleichen i. wird ein Ergebnis der Ausführung des Programms hinzufügen, um zu sehen, ob es klarer wird. –