2011-01-24 64 views
0

对不起,这个意义上说,似乎就是无法做出什么在这个小片的C事情的意义:一段简单的CI不能做的

#include <stdio.h> 

    main() 
    { 
     int i; 
     if (fork()) { /* must be the parent */ 
      for (i=0; i<1000; i++) 
      printf("\t\t\tParent %d\n", i); 
     } 
     else { /* must be the child */ 
      for (i=0; i<1000; i++) 
       printf("Child %d\n", i); 
     } 
    } 

据我了解,它会打印1000次孩子和1000次父母,但显然它要复杂得多,我必须完全理解它!请有人能向我解释吗?另外,我将如何更改程序,使父母和孩子执行不同的计算?

非常感谢本您的帮助:)

+1

这看起来像普通的C.如果这是C++,不要将它标记为C.尽管有祖先关系,但它们不是同一种语言。 – 2011-01-24 22:21:40

+0

FWIW,`fork()`是一个系统函数,不是标准的C++。 – 2011-01-24 22:22:11

回答

4

fork()创建一个新进程。所以从这一点开始,将会有两个独立的进程从fork()所在的代码点继续。在主进程中,fork()返回新的子进程的PID,并在子进程中返回零。所以代码将在不同的进程中执行if语句的不同分支。

请注意,新进程与线程不同。这些进程不会有任何共同的全局变量或类似的事物,但它们是完全独立的。但他们否则他们是相同的。

1

fork()函数产生一个新的进程,与原来的“父”进程的内存的精确拷贝。这两个过程都从同一点继续执行,但fork()为子级返回0,父级为非零。所以父节点执行第一个循环,并且子节点执行第二个循环。

请注意,由于父和子之间没有任何同步,因此您看到屏幕上显示的字符串的顺序基本上是随机的。

1

fork()函数生成所谓的子进程。子进程首先是名为fork()的进程的克隆。它甚至在父进程停止的地方开始执行,这是在调用fork()后立即执行的。

唯一的区别是fork()将返回父进程的true(或零)和子进程的false(或非零)。这意味着父进程在调用fork()后将执行条件的第一部分。子进程将开始执行条件的第二部分。

每个人将按照操作系统预定的时间打印1000次,并且每个人在到达主方法结束时最终都会终止。