Multithreading 请帮助解释操作系统中的fork()
给出以下代码: 变量c有多少个不同的副本?他们的价值观是什么 因此,答案是有三个过程: 父进程的c值为20 child1过程的c值为10 child2过程的c值为15 有人能帮我详细解释一下吗?一行接一行就好了Multithreading 请帮助解释操作系统中的fork(),multithreading,process,operating-system,Multithreading,Process,Operating System,给出以下代码: 变量c有多少个不同的副本?他们的价值观是什么 因此,答案是有三个过程: 父进程的c值为20 child1过程的c值为10 child2过程的c值为15 有人能帮我详细解释一下吗?一行接一行就好了 我发现还有另一个问题是关于fork的,但我想具体了解这几行代码,以及答案是如何得出的。第一个子进程执行: int child = fork(); int c = 5; /* since child == 0 */ c += 5; int child = fork();
我发现还有另一个问题是关于fork的,但我想具体了解这几行代码,以及答案是如何得出的。第一个子进程执行:
int child = fork();
int c = 5;
/* since child == 0 */
c += 5;
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* child == 0 now */
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* since child != 0 */
c += 5;
第二个子级执行:
int child = fork();
int c = 5;
/* since child == 0 */
c += 5;
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* child == 0 now */
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* since child != 0 */
c += 5;
父进程执行:
int child = fork();
int c = 5;
/* since child == 0 */
c += 5;
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* child == 0 now */
int child = fork();
int c = 5;
/* since child != 0 */
child = fork();
c += 10;
/* since child != 0 */
c += 5;
我明白,但对于这段特定的代码,我想了解这些答案是如何得出的。简短的回答是,每次成功调用fork都会创建一个新的流程。除了fork返回的值外,新进程在每个细节上都与旧进程相同。fork在新进程中返回0,但在原始进程中,它返回新进程的pid。pid始终大于0。有关详细答案:请参阅副本。那里的答案详细地说明了这一点。