如何解决fork() 如何产生不同的结果?
#include <stdio.h>
#include <unistd.h>
int main()
{
int x = 1;
/* fork off a child process */
if (fork()==0)
x++;
/* fork off another child process */
if (fork()==0)
x++;
printf("x = %d : ",x); fflush(stdout);
/* wait for a signal to be received */
pause();
}
每次运行它都会给出不同的结果。我试过阅读原因,但我无法理解它。这可能的输出是什么?为什么?
解决方法
每个进程的输出是完全确定的(假设没有错误)。
P1 P11 P111
+----------------+ + - - - - - - - -+ + - - - - - - - -+
| x = 1; | : x = 1; : : x = 1; :
| fork(); // !0 |------->: fork(); // =0 : : fork(); // =0 :
| fork(); // !0 |---+ | ++x; | : ++x; :
| printf(); | | | fork(); // !0 |------->: fork(); // =0 :
+----------------+ | | printf(); | | ++x; |
| +----------------+ | printf(); |
| +----------------+
|
| P12
| + - - - - - - - -+
| : x = 1; :
| : fork(); // !0 :
+--->: fork(); // =0 :
| ++x; |
| printf(); |
+----------------+
- P1 输出
1
。 - P11 输出
2
。 - P111 输出
3
。 - P12 输出
2
。
然而,根据调度的变化,每个进程的输出出现的顺序是不可预测的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。