因此,我得到了一个使用随机整数创建和矩阵的程序,并给出了一个在其内部搜索并给出结果的数字(如果它在某处)。
我想创建forks来在矩阵内的paralel中搜索,一切正常,但是为此创建的forks()重复了结果。
我已经使用一些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;
}
最佳答案
#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();
/*Pretende-se determinar a existencia de um determinado n ́umero inteiro nas linhas de numa matriz de
numeros inteiros, em que o n ́umero de colunas e muito maior do que o numero de linhas. Implemente,
utilizando processos um programa que determine a existencia de um determinado numero, recebido como
argumento, numa matriz gerada aleatoriamente. */
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()%10+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); }
}
_exit(0);
}
}
for(i=0;i<linhas;i++) {
wait(NULL);
}
return 1;
}