如何让3个进程并行运行?下面的解决方案正确吗?
在我的解决方案中,我放了一些代码来查看经过的时间,我认为这是在顺序模式下的tunning。我需要同时运行pid1、pid2和pid3。

pid = fork();
if(pid == 0) {
        //code...
    exit(EXIT_SUCCESS);
} else if(pid > 0) {
        pid1 = fork();
        if(pid1 == 0) {
                //pid1 code...
            exit(EXIT_SUCCESS);
    } else if(pid1 > 0) {
            waitpid(pid1, &status, 0);
    } else {
        printf("Fork error %d.\n", errno);
    }

    pid2 = fork();
    if(pid2 == 0) {
                //pid2 code...
        exit(EXIT_SUCCESS);
    } else if(pid2 > 0) {
        waitpid(pid2, &status, 0);
    } else {
        printf("Fork error %d.\n", errno);
    }

    pid3 = fork();
    if(pid3 == 0) {
                //pid3 code...
                exit(EXIT_SUCCESS);
    } else if(pid3 > 0) {
        waitpid(pid3, &status, 0);
    } else {
            printf("Fork error %d.\n", errno);
    }
        waitpid(pid, &status, 0);
}

最佳答案

在启动下一个孩子之前,你一直在等待一个孩子完成。尝试以下方法:

for (int i = 0; i < 3; ++i)
{
    pid = fork();

    if (pid < 0)
        error

    if (pid == 0)
    {
        child does thing
        exit
    }
}

for (int i = 0; i < 3; ++i)
{
    wait(&status);
}

编辑
所以把你的代码改成这样,然后在最后等待。
    if (pid2 == 0)
    {
        //pid2 code...
        exit(EXIT_SUCCESS);
    }
    else
        if (pid2 < 0)
        {
            printf("Fork error %d.\n", errno);
        }

   //....same outline for 3, etc.

关于c - C中的并发过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5792452/

10-09 07:13