gpt4 book ai didi

c - 叉(); C 中的方法 : determine order

转载 作者:行者123 更新时间:2023-11-30 14:59:04 26 4
gpt4 key购买 nike

我试图理解 fork 在 C 中是如何工作的,但我在某个地方误解了一些东西。

我去年遇到了一位教授给我的测试,但我无法回复它:我们有 3 个任务(进程或线程),伪代码如下:

Th1 { display "Hello 1" }
Th2 { display "Hello 2" }
Th3 { display "Hello 3" }

main() {
Fork(Th1);Fork(Th2);Fork(Th3);
}

问题是:这些任务的执行顺序是什么?为什么?

我该如何回复这个问题?有没有任何指南或任何有用的资源可以让我了解 fork 、信号量和内存分配?

我是低级编程的真正新手。

最佳答案

您询问的详细信息有意未指定。您应该想象它发生的方式是,在每次“fork”操作之后,父进程和子进程同时运行,并且它们所做的事情之间没有顺序,除非您明确地进行排序。

您展示的伪代码程序可以以任何顺序打印“Hello 1”、“Hello 2”和“Hello 3”,并且每次运行时的顺序可能不同,具体取决于系统中其他地方发生的事故。

对比这个伪代码程序:

main { display "Hello main"; fork(Th1); }
Th1 { display "Hello 1"; fork(Th2); }
Th2 { display "Hello 2"; fork(Th3); }
Th3 { display "Hello 3"; }

这个保证按顺序打印“Hello main”、“Hello 1”、“Hello 2”、“Hello 3”。你明白为什么吗?

不幸的是,我无法为您提供清晰、简洁的在线引用资料。 specification of fork中有这句话:

After fork(), both the parent and the child processes shall be capable of executing independently before either one terminates.

但是你必须知道如何阅读标准语才能知道这意味着我上面所说的一切。我能想到的其他所有内容都是教科书长度的,例如W.理查德·史蒂文斯的Advanced Programming in the Unix Environment您可能想看看您的图书馆是否有该副本。

关于c - 叉(); C 中的方法 : determine order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029344/

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