实验三:进程的控制

发布时间:2012-03-06 21:59:55   来源:文档文库   
字号:

实验三:进程的控制

内容:在进程的创建实验的基础上,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

如果在程序中使用系统调用Lockf( )来给每一个进程加销,可以实现进程之间的互斥,观察并分析出现的现象。

要求:理解加控的控制前后,输出不同结果的原因。

示例:

# include

# include

# include

main()

{

int p1,p2,i;

while((p1=fork())==-1);

if(p1==0)

{

for(i=0;i<500;i++)

printf("child %d\n",i);

}

else

{

while((p2=fork())==-1);

if(p2==0)

{

for(i=0;i<500;i++)

printf("son%d\n",i);

}

else

{

for(i=0;i<500;i++)

printf("daughter%d\n",i);

}

}

}

<运行结果>

SON…

CHILD…

DAUGHTER…

<分析:>由于函数PRINTF()输出的字符串之间不会被中断,因此,字符内部的字符顺序输出时不变。但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字答的结果相同。

<程序3>

#include

#include

#include

#include

main()

{

int p1,p2;

int i;

while ((p1=fork())==-1);

if(p1==0)

{

lockf(1,1,0);

for(i=0;i<500;i++)

printf("child%d\n",i);

lockf(1,1,0);

}

else

{

while ((p2=fork())==-1)

if(p2==0)

{

lockf(1,1,0);

for(i=0;i<500;i++)

printf("son%d\n",i);

lockf(1,0,0);

}

else

{

lockf(1,1,0);

for(i=0;i<500;i++)

printf("daughter%d\n",i);

lockf(1,0,0);

}

}

}

<运行结果>大致与未上锁的输出结果相同,也是随着执行时间不同,输出结果表明的顺序有所不同。

<分析:>因为上述执行时,不同进程之间不存在共享临界资源(其中打印机的互斥性已由操作系统保证)问题所以,加锁与不加锁效果相同。

本文来源:https://www.2haoxitong.net/k/doc/68ebf0d484254b35eefd34ef.html

《实验三:进程的控制.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式