【问题标题】:Find number in matrix using fork使用 fork 在矩阵中查找数字
【发布时间】:2016-09-04 06:56:00
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c fork wait


    【解决方案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 */
    }
    

    【讨论】:

    • 啊,好的!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多