在阅读一些关于 C 中 fork() 的文章时,我看到了这个我无法理解的示例(下面的代码):
理解问题:我们只运行“if”或“else”,而不是同时运行。但是由于子进程和父进程“同时”运行,在这个例子中我们看到我们都经历了“if”和“else”!尽管它是同时发生的,但实际上并非如此,这取决于哪个进程将首先获得 CPU(对吗?)。
让一切变得“更奇怪”的是,我们可能先经过“else”,然后再经过“if”。这怎么可能 ?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void forkexample()
{
// child process because return value zero
if (fork() == 0)
printf("Hello from Child!\n");
// parent process because return value non-zero.
else
printf("Hello from Parent!\n");
}
int main()
{
forkexample();
return 0;
}
可能的输出是:
孩子问好!
来自家长的问候!
(或者)
来自家长的问候!
孩子问好!