一、实验目的:
进一步认识并发执行的概念,区别顺序执行和并发执行。
分析进程征用临界资源的现象,学习解决进程互斥的方法。
二、实验环境:
一台运行Linux操作系统的计算机。
三、实验内容:
(写出主要的内容)
1.实验编程
(1)进入Linux操作系统。
(2)打开终端,进入vi编辑器
(3)输入源程序代码。
源代码如下
:#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
intpid1,pid2;
printf("a\n");
if((pid1=fork())<0)
{
printf("Child1fail create!\n");
return1;
}
elseif(pid1==0)
{
printf("b\n");
return;
}
if((pid2=fork())<0)
{
printf("Child2fail create!\n");
return1;
}
elseif(pid2==0)
{
printf("c\n");
return;
}
}
(4)按Esc键,进入命令模式后,输入“:wq文件名”就可以运行该程序了。
2.可选实验
(1)修改在实验编程过程中已编写的程序。
当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。
截图如下所示
(2)在程序中使用系统调用lockf()给每个程序加锁,可以实现进程之间的互斥,观察并分析现象。
四、心得体会:
fork可以建立一个新进程,把当前的进程分为父进程和子进程,新进程称为子进程,而原进程称为父进程。父子进程,fork之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但更像是兄弟关系,这两个进程共享代码空间,但数据空间是相互独立的。lockf():用作锁定文件的某些段或者整个文件,这样就可以实现进城之间的互斥了,但是因为上述程序执行时,不同进程之间不存在共享临界资源问题,所以,这时候的加锁与不加锁效果相同。