C中的并发过程

时间:2011-04-26 15:13:51

标签: c fork

如何让3个进程并行运行?以下解决方案是否正确? 在我的解决方案中,我放了一些代码来查看时间,我认为这是在顺序模式下进行调整。我需要同时运行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);
}

3 个答案:

答案 0 :(得分:4)

在开始下一个孩子之前,你一直在等待一个孩子完成。尝试类似:

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.

答案 1 :(得分:0)

查看我的wrap计划,特别是wrapc的代码。它要求自己两次,将一个孩子强行插入wrap,读取,写入wrap,然后读回另一个孩子。

答案 2 :(得分:0)

您的问题有些模糊 - 您是否看到3个进程并行运行? 编写代码的方式就是让您立即退出子进程。