【问题标题】:Wait not working to sync three processes等待不工作同步三个进程
【发布时间】:2011-09-12 00:56:52
【问题描述】:

我是一个新的 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);
    };

  }

相反,我得到这个输出:[父亲][儿子][孙][父亲][儿子][父亲][父亲][儿子][孙][父亲][父亲][儿子][父亲][父亲]

我在使用等待代码时是否误解或遗漏了什么?非常感谢。

【问题讨论】:

  • 尝试刷新流,fflush( stdout ),看看是否有帮助。
  • 或者像fprintf (stderr, "[FATHER]");一样直接写到stderr。
  • K-ballo 在每次 printf 后使用 fflush 后效果都很好。非常感谢!

标签: c unix ipc wait


【解决方案1】:

与其在每次调用printf 后调用fflush,不如使用write 系统调用打印到stdout(如有必要,首先使用sprintf 格式化输出字符串) . write 系统调用执行无缓冲写入,这样您就不必记住每次都调用 fflush

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

【讨论】:

  • 我会调查你的提议。 TBH,我从未在 C 上使用过可变参数宏 :)
猜你喜欢
  • 1970-01-01
  • 2019-01-13
  • 2011-01-15
  • 2014-06-06
  • 2018-02-07
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多