使用fork在矩阵中查找数字

时间:2016-05-09 15:05:45

标签: c fork wait

我想在矩阵中搜索作为参数传递的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;
}

感谢。

1 个答案:

答案 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 */
}