回 帖 发 新 帖 刷新版面

主题:进程控制的问题

#include <stdio.h>
main( )
{
int p1,p2,i;
while((p1=fork( ))= = -1);          /*创建子进程p1*/
if (p1= =0)
  for(i=0;i<10;i++)
printf("daughter  %d\n",i);
else
{
                while((p2=fork( ))= = -1);   /*创建子进程p2*/
if(p2= =0)
                  for(i=0;i<10;i++)
                       printf("son  %d\n",i);
else
                  for(i=0;i<10;i++)
                       printf("parent  %d\n",i);
}
}
这段代码我还是不理解它怎么就会不连续输出了
虽然说内部的进程调度可能不是连续的
但是从语句上看,看不出什么能让它不连续输出的地方啊 

书上说输出会出现praent,son,daughter 交替输出的情况
我一直得不到这样得结果~
求达人指点

回复列表 (共1个回复)

沙发

#include <stdio.h>
main( )
{
int p1,p2,i;
while((p1=fork( ))= = -1);          /*创建子进程p1*/
if (p1= =0)
  for(i=0;i<10;i++)
    printf("daughter  %d\n",i);  /*第一部分*/
else
 {
  while((p2=fork( ))= = -1);   /*创建子进程p2*/
   if(p2= =0)
      for(i=0;i<10;i++)
        printf("son  %d\n",i);  /*第二部分*/
   else
      for(i=0;i<10;i++)
       printf("parent  %d\n",i); /*第三部分*/
 }
}
这是针对进程控制的特殊语法` 创建完新的进程后` if语句的两个分支就是把 刚创建的进程与父进程分开执行`也就是第一部分代码 和其他部分代码在两个进程上 并行(宏观上)执行,第二个进程创建 道理一样的``` 为什么没有交替出现` 就是进程的问题了` 微观上 串行`` 每个进程运行完`又执行下个进程`结果就这样` 一个进程的运行时间`比CUP的时间片 还要短`又没有优先级高的进程打断`所以结果`就是连续的`
 偶个人理解`

我来回复

您尚未登录,请登录后再回复。点此登录或注册