实验 进程的同步和互斥c语言,操作系统进程同步与互斥实验报告0204192337.pdf

学 生 实 验 报 告

姓名: 年级专业班级 学号 成绩

验证 设计

课程名称 操作系统 实验名称 实验 1 进程的同步与互斥 实验类

综合 创新

【实验目的、要求】

1.通过编写程序实现进程同步和互斥,使学生掌握有关进程(线程)同步与互斥的原理以及解决进

程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥等有关的内容。2.了解

Windows2000/XP 中多线程的并发执行机制、线程间的同步和互斥。3.掌握多道程序设计的基本理论、方

法和技术,培养学生多道程序设计的能力。

【实验内容】

在 Windows XP 或 Windows 2000 等操作系统环境下,使用 VC、VB、Delphi、java 或 C 等编程语言,

采用进程(线程)同步和互斥的技术编写程序实现生产者-消费者问题(或哲学家进餐问题、读者-写者

问题)或自己设计一个简单程序模拟进程(线程)同步和互斥在实际中的应用。

【实验环境】(含主要设计设备、器材、软件等)

计算机 C 语言编程软件

【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数据等)

1.认真分析生产者-消费者经典进程同步互斥问题,对算法构思.

2.算法的流程图表示如下:

开 始

Y N

a=1?

Y N

b=1?

输出 1,0,0

输出 0,1,0 Y c=1? N

输出 0,0,1 输出 0,0,0

结 束

3.启动计算机,运行 C 编程软件.

4.程序关键代码.

#define N 1 //N 定义为临界资源!

printf("请输入三个进程:\n"); //初始状态为:临界资源处于空闲状态!

loop:scanf("%d %d %d",&a,&b,&c); //输入的进程名为:a,b,c!进程名输入的先后代表进程的访问顺序!

if(a==N) //判断进程 a 是否占据临界资源!若 a==N,表明 a 访问临界资源!

{

printf("a=%d\n",a); //a 正在访问临界资源!

printf("b=0,c=0\n"); //b,c 不能进入自己的临界区,需等待 a 释放临界资源!

printf(“ 临界资源正在被进程 a 访问,进程 b,c 必须等待.\n”);

}

else if(b==N)

{

printf("b=%d\n",b); //b 正在访问临界资源!

printf("a=0,c=0\n"); //a,c 不能进入自己的临界区,需等待b 释放临界资源!

printf(“ 临界资源正在被进程b 访问,进程 a,c 必须等待.\n”);

}

5.编译链接所编写的程序,在编译正确的情况下执行程序.

6.记录程序执行的结果(如下图所示).

注意:初始状态为:临界资源处于空闲状

20 10 年 12 月 16 日

【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见)

1.进程 a,b,c 分别访问临界资源时程序执行的结果如下.

你可能感兴趣的:(实验,进程的同步和互斥c语言)