操作系统实验一-并发执行的进程(总是输出一个结果)

题目:
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程并发执行,观察实验结果并分析原因。
代码:

#include 
#include 
#include 
int main(int argc,char *argv[])
{
    int pa;  //进程a
    int pb;  //进程b
    while((pa=fork())==-1); //等待子进程a建立完成
    if(pa==0)
      {
         putchar('b');
      }
    else
      {
         while((pb=fork())==-1);
         if(pb==0)
           {
              putchar('c');
           }
         else
           {
             putchar('a');
           }
      }
 }

刚开始结果如下,一直输出acb,可能会偶尔出现几次abc
操作系统实验一-并发执行的进程(总是输出一个结果)_第1张图片
对于这上面这种只输出acb的结果,我的想法是,一开始就是父进程在占用cpu,故而即使子进程创建了,也得等父进程运行完,也就是输出a之后才轮到子进程,至于为什么会是cb,这或许就是子进程先后建立和获取时间片之间的时间差造成的。
按理论来说,三个并发执行的进程是随机争夺cpu的,也就是应该会出现abc,bac,acb等不同序列的结果,代码是不会错的,那应该就是虚拟机的设置有些不同。
于是我查了自己的cpu情况:
操作系统实验一-并发执行的进程(总是输出一个结果)_第2张图片
或许是这个内核数量的问题,于是我把内核数量提高到3.这里需要先关掉ubuntu,才可以修改
改完后再跑:
操作系统实验一-并发执行的进程(总是输出一个结果)_第3张图片
这次结果就比较随机啦,但总有一些像abc这个是输出得挺多的。不过这也证明这其中可以调节这个输出的情况
操作系统实验一-并发执行的进程(总是输出一个结果)_第4张图片

你可能感兴趣的:(学习)