gpt4 book ai didi

c - fork 执行顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:12 26 4
gpt4 key购买 nike

main()
{
if(!fork())
while(1)
printf("HELLO");
else
while(1)
printf("WORLD");

}

输出:... HELLO HELLO HELLO ....等等,但是执行应该是"RANDOM"因为fork和父进程是不同步的我必须得到 AS HELLO WORLD WORLD HELLO WORLD ...(我预期的随机顺序)但那并没有发生。谁能解释一下。

最佳答案

stdio 是缓冲的,所以在缓冲区被填满之前,两个进程都不会写入任何东西,然后将整个写入作为一个单元(这对于普通文件通常是原子的,但对于终端设备则不一定,以及它是否是原子的对于管道是一件复杂的事情)。此外,如果您在单核机器上,一个进程将持续运行,直到内核认为它已经花费了足够的 cpu 时间,然后另一个进程将被调度,等等。

如果你想让 stdio 缓冲问题消失,在 main 的开头添加 setbuf(stdout, 0); 或使用 stderr(默认情况下是无缓冲的)。

关于c - fork 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com