我想在矩阵中搜索作为参数传递的int值,我想用fork做。 它应该同时搜索几行(每个不同的孩子将搜索不同的行。 然而,我正在做一个孩子的方式搜索第一行,然后另一个孩子搜索第二行,依此类推,但他们没有在同一时间进行。第二个孩子等待第一个结束它开始前搜索。我想我不是在等待和退出,因为我应该。到目前为止,这是我的代码:
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;
}
感谢。
答案 0 :(得分:1)
你想在循环之外等待。否则,进程将以串行方式运行。这样的事情应该有效:
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 */
}