等待不能同步三个进程

时间:2011-09-12 00:56:52

标签: c unix ipc wait

我是一个新的C dev。我正在尝试使用以下代码同步三个进程来打印[父亲] [SON] [GRANDSON] [父亲] [SON] [GRANDSON]:

int main(int argc, char **argv)
{

    int c = 0;
    while (c<2)
    {
        c++;
        printf("[FATHER]");
        pid_t son = fork();
        if (son == 0)
        {
            printf("[SON]");
            pid_t grandson = fork();
            if (grandson == 0)
            {
                printf("[GRANDSON]");
                return 0;
            }
            wait(NULL);
            return 0;
        }
        wait(NULL);
    };

  }

相反,我得到这个输出:[父亲] [SON] [GRANDSON] [父亲] [SON] [父亲] [父亲] [SON] [GRANDSON] [父亲] [父亲] [SON] [父亲] [ FATHER]

在使用代码等待时,我是否误解或遗漏了某些内容?非常感谢你。

1 个答案:

答案 0 :(得分:0)

不是在每次调用fflush后调用printf,而是使用write系统调用打印到stdout(格式化输出字符串)会更好必要时首先使用sprintfwrite系统调用执行无缓冲写入操作,这会阻止您每次都记住调用fflush

您甚至可以使用可变参数宏来避免始终写入sprintf行后跟write行。