首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我搞不懂的一小段C

问我搞不懂的一小段C
EN

Stack Overflow用户
提问于 2011-01-25 06:17:25
回答 3查看 199关注 0票数 0

对此我很抱歉,我只是不能理解这小段C:

代码语言:javascript
复制
    #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次父代,但显然它更复杂,我必须完全理解它!有谁能给我解释一下吗?另外,我如何更改程序,以便父进程和子进程执行不同的计算?

非常感谢您在这方面的帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-25 06:21:10

fork()创建一个新进程。因此,从那时起,将有两个单独的进程,这两个进程都从fork()所在的代码点继续。在主进程中,fork()返回新的子进程的PID,在子进程中,它返回零。因此,代码将在不同的进程中执行if语句的不同分支。

还请记住,新进程与线程不是一回事。这些进程不会有任何全局变量或类似的共同点,但它们是完全独立的。但它们在其他方面是相同的。

票数 4
EN

Stack Overflow用户

发布于 2011-01-25 06:20:46

fork()函数生成一个新进程,它具有原始“父”进程的内存的精确副本。这两个进程继续从同一点执行,但是fork()为子进程返回0,为父进程返回非零值。所以父进程执行第一个循环,子进程执行第二个循环。

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

票数 1
EN

Stack Overflow用户

发布于 2011-01-25 06:22:26

fork()函数生成所谓的子进程。子进程是最初调用fork()的进程的克隆。它甚至在父进程停止执行的同一位置开始执行,也就是在调用fork()之后。

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

每个方法都将按照操作系统的调度打印1000次,当它们到达main方法的末尾时,每个方法都将最终终止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4787846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档