进程同步实验
实验二 进程同步实验
一、实验目的
加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥
操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解 Linux 系
统中 IPC 进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试
技术。
二、实验内容
抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽
烟。抽烟者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟
草,一个有纸,另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有
三种材料,但每次仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在
卷起并抽掉一颗烟后会发信号通知供应者,让它继续提供另外的两种材料。这一过
程重复进行。 请用以上介绍的 IPC 同步机制编程,实现该问题要求的功能。
三、实验要求
总结和分析示例实验和独立实验中观察到的调试和运行信息,说明您对与解决
非对称性互斥操作的算法有哪些新的理解和认识? 为什么会出现进程饥饿现
象?本实验的饥饿现象是怎样表现的?怎样解决并发进程间发生的饥饿现象?您
对于并发进程间使用消息传递解决进程通信问题有哪些新的理解和认识?根据实
验程序、调试过程和结果分析写出实验报告。
四、实验步骤
1) 打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立以下名为ipc.h 的C语言程序,该程序皆为头文件,该程序代码为:
2) 新建一个文件夹,在该文件夹中建立以下名为ipc.c 的C语言程序,该程序皆为头文件,该程序代码为:
3) 新建一个文件夹,在该文件夹中建立以下名为consumer.c的C语言程序,该程序皆为头文件,该程序代码为:
4) 新建一个文件夹,在该文件夹中建立以下名为producer.c的C语言程序,该程序皆为头文件,该程序代码为:
5)输入gcc -c consumer.c ipc.c
报错,如下图
修改程序代码
6)输入gcc consumer.o ipc.o -o consumer
7)输入gcc -c producer.c ipc.c
8)输入gcc producer.o ipc.o -o producer
五、实验结果
1) 新建终端打开输入./producer 0
2) 新建终端打开输入./producer 1
3) 新建终端打开输入./consumer 0
4) 新建终端打开输入./consumer 1
5) 新建终端打开输入./consumer 2
运行如下图所示:
六、实验小结
通过这次实验加深了我对并发协作进程同步与互斥概念的理解,在消费者和生产者执行中存在着同步与互斥,通过实验更清楚的了解了他们运行的过程以及如何去实现他们,同时还有如何有效的设置信号量。面对具体的进程同步与互斥问题,如何清晰的去理清楚他们之间的关联也让我在这次实验中学习了解到了。