0
所以,我得到了一個程序,它創建了一個隨機整數,並給出了一個數字,它在裏面搜索並給出結果,如果它存在的話。叉()和 - 重新進入?
我想創建分叉以在矩陣內進行搜索,但是爲了創建叉()正在重複結果。
我已經把一些printfs來檢查發生了什麼,我能看到的是父進程和子進程正在重複循環(從而重複結果)。
這是怎麼發生的?
#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;
}
'如果(PID [I] == 0)'這是孩子的代碼嗎?在塊內執行代碼後它做了什麼?孩子將執行的下一行代碼是什麼?父代碼相同 - 父代在「else」代碼塊後執行什麼? – kaylum
你期望什麼機制會阻止子進程進一步迭代'for'循環? – Dolda2000
也許我沒有正確表達自己。 @kaylum孩子將執行for循環,那我想要它做什麼,父進程將等待()直到所有子進程完成。那就是我想要的。 但是當我測試它時,它循環更多的次數比它應該。 (重複結果與我 將增加運行程序的結果,看看它是否變得更清晰 –