循环内的运行叉会产生意外结果(测量过程切换时间)

时间:2015-02-18 08:58:03

标签: c operating-system

我正在编写一个程序来衡量执行流程切换所需的时间。为了做到这一点,我有一个父母给它的孩子写一个字节的消息,孩子读它。

我的问题出现在这个循环中:

for(i=0; i<2; i++)
{
    if(fork()==0) //child process, read
    {
        close(pipefd[1]);
        read(pipefd[0]);
        close(pipefd[0]);
    }

    else //parent process
    {
        close(pipefd[0]);
        write(pipefd[1]);
        close(pipefd[0]);
    }
}

为了测试fork看到父和子的频率,我将printf语句放入其中,并且我在屏幕上打印了大约15个语句。考虑到循环应该只运行两次,这怎么可能?

1 个答案:

答案 0 :(得分:2)

这是因为每个子进程都将创建其他进程。

执行if块后,每个孩子将在循环开始时再次返回fork(),直到所有子进程中都为i == 2

编辑:

为了避免这种情况,我建议使用这样的东西:

if(fork() == 0)
{
    //Do stuff
    break;
}

也许这不是最优雅的方式,但它应该有用。