我是一名新的 C 开发人员。我正在尝试同步三个进程以使用此代码打印 [FATHER][SON][GRANDSON][FATHER][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);
};
}
相反,我得到这个输出:[父亲][儿子][孙子][父亲][儿子][父亲][父亲][儿子][孙子][父亲][父亲][儿子][父亲][父亲]
我在使用等待代码时是否误解或遗漏了什么?非常非常感谢。
最佳答案
与其在每次调用 printf
之后调用 fflush
,不如使用 write
系统调用打印到 stdout
(如有必要,首先使用 sprintf
格式化输出字符串)。 write
系统调用进行无缓冲写入,这样您就不必每次都记住调用 fflush
。
您甚至可以使用可变参数宏来避免总是编写 sprintf
行后跟 write
行。
关于c - 等待无法同步三个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382398/