fork()和二叉树创建

时间:2014-03-28 09:32:17

标签: c fork binary-tree

如何为以下代码创建二叉树?

#include <stdio.h>
#include <unistd.h>
int main()
{
   fork();
   fork() && fork() || fork();
   fork();

   printf("forked\n");
   return 0;
}

基本上我无法解决逻辑运算符条件。对于无条件的fork()语句,可以很容易地完成,但是上面的代码呢。 这里是参考链接 http://www.geeksforgeeks.org/fork-and-binary-tree/

1 个答案:

答案 0 :(得分:1)

#include <stdio.h>
int main()
{
   fork(); /* A */
   ( fork()  /* B */ &&
   fork()  /* C */ ) || /* B and C are grouped according to precedence */
   fork(); /* D */
   fork(); /* E */

   printf("forked\n");
   return 0;
}
  • 有5个叉号(A,B,C,D,E)。
  • 程序以主线程(m)开头。
  • 执行fork时,将创建一个新的子进程。 (c)中

因此,根据显示的图表,每个节点总是有2个子节点。

  • 左侧节点始终是创建过程(m)
  • 右侧节点是子进程。
  

“成功时,子进程的PID在父进程中返回,并在子进程中返回0。”

让我们看看叉B. 父进程(m)将返回非neidtive pid,子进程(c1)返回0.

  • 因此,父进程执行 fork C ,但跳过 fork D 归因于short circuit evaluation

    (1234 && 4392) || fork()

  • 新创建的子进程会跳过 fork C 并执行 fork D 出于上述原因。

    (0 && fork() ) || fork()

enter image description here