我运行了这个小程序来测试fork()
,但我无法弄清输出是什么,程序代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int i = 0;
void create()
{
fork();
printf("Inside i= %d \n", i);
i = i + 1;
fork();
}
int main()
{
create();
return 0;
}
输出结果为:
Inside i= 0
Inside i= 0
Inside i= 0
Inside i= 0
难道不应该只有两个输出吗?因为在最后一个fork()
中,子进程没有打印任何内容。
我读过这样一种说法,即在fork()
之后,子进程将执行下一条指令,但是最后一个子进程似乎已经执行了printf()
指令。
printf()
不是线程安全的,因此您应该预料到会遇到麻烦。 - VillageTechfork()
不会创建线程。 - Marco Bonelli