gpt4 book ai didi

c - fork() sys_call 中的一些奇怪结果

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:50 24 4
gpt4 key购买 nike

我有以下代码:

int main(){
int i = 4, pid;
while (--i){
pid = fork();
if (pid || (i&1))
printf ("Boo %d\n", i);
}
return 0;
}

我看懂了代码,但是我不明白为什么我多次运行代码会得到不同的结果。

谁能告诉我时间安排有何不同?

最佳答案

fork() 之后,接下来运行的进程(子进程或父进程)基本上是随机的。 if 对所有父进程和一半子进程都为真。

当每个 child 成为 parent 时,随机性仍然存在。

Boo 3
Boo 3
Boo 2
Boo 2
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1

这看起来很合乎逻辑。但是在另一次运行中,我得到了这个:

Boo 3
Boo 2
Boo 1
Boo 3
Boo 2
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1
Boo 1

在这种情况下,最早的进程之一直到另一个进程的祖先之后才开始运行。

进程调度没有可预测性。这就是操作系统的本质。如果您需要某种顺序控制,则必须添加额外的代码。也许是一些定时器,或互斥锁,或主调度。

关于c - fork() sys_call 中的一些奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236636/

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