gpt4 book ai didi

c - 如何运行进程?

转载 作者:行者123 更新时间:2023-12-04 04:25:20 26 4
gpt4 key购买 nike

我创建了进程。其中之一打印“1”30 次。另一个 打印“2”30 次。我希望这些进程依次打印它们的数字。

像这样:

1
2
1
2
...

但是每次我运行程序时,数字的显示都不一样:

1,2,2,1; 1,2,1,2,2,1,1,2.

谁能告诉我,如何解决这个问题?

最佳答案

这是预期的行为。在进程 fork 后(这是一个非常短的持续时间),两个进程将根据它们的 ID 打印 2 或 1。因为 sleep 方法分辨率是 1 秒,并且两个 fork 进程之间的时间差与此相比太小,打印 id 的顺序将不确定,因为两个进程将调用 printf 函数的时间非常接近(在微秒分辨率上可能).为了能够订购打印编号,您可以向其中一个过程添加延迟:

if(pid==0)
{
for(i=1;i<=30;i++)
{
printf("%s\n","2");
sleep(2);
}
}
else
{
sleep(1);
for(i=1;i<30;i++)
{
printf("%s\n","1");
sleep(2);
}
}

因此, fork 进程预计不会完美同步运行。为了实现进程间同步,您可以使用进程间级别的共享变量:https://stackoverflow.com/a/13274800/2183287

关于c - 如何运行进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33195887/

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