夏磊--S1048035--作业2--进程同步机制-生产者消费者问题

夏磊 S1048035 2010级秋季班

操作系统报告

实验2--进程同步机制 --生产者消费者问题

姓名: 夏磊 学号: S1048035 班级: 2010级秋季班 指导教师: 陈向群、原仓周

第1页 / 共22页

夏磊 S1048035 2010级秋季班

目录

操作系统报告 ................................................................................................... 1 1

1.1 1.2 1.3

设计思路及主要代码分析 ........................................................................ 3

实验目的 ..................................................................................................................................... 3 实验要求 ..................................................................................................................................... 3 设计思路 ..................................................................................................................................... 4

程序流程图 ......................................................................................................................... 4 设计说明 ............................................................................................................................. 5 程序结构设计 ..................................................................................................................... 5

1.3.1 1.3.2 1.3.3 1.4

程序代码 ..................................................................................................................................... 7

2

2.1 2.2

实验结果及问题分析 ............................................................................. 13

测试结果 ................................................................................................................................... 13 结果分析 ................................................................................................................................... 14

3 4 5

5.1 5.2 5.3

心得体会 ............................................................................................... 15 问题回答 ............................................................................................... 15 附录 ...................................................................................................... 22

机器环境及配置 ....................................................................................................................... 22 编译环境 ................................................................................................................................... 22 程序及源码 ............................................................................................................................... 22

第2页 / 共22页

夏磊 S1048035 2010级秋季班

1 设计思路及主要代码分析

1.1 实验目的

用P、V操作实现进程同步机制的多个生产者-消费者问题,了解生产者-消费者问题具体实施办法。

1.2 实验要求

在Windows环境下,实现多个生产者、多个消费者、多个缓冲区问题

对某一个生产者有需求的所有消费者均访问过某个缓冲区后,该生产者或其他生产者才可以向这个缓冲区再存放产品

要求构造一个输入数据文本,运行后,显示对应的输出结果 测试文本格式: 测试文件包括n+1行

第一行为缓冲区数目,以下每行为一个记录,记录的字段用空格分开

记录的第一个字段是线程序号,第二字段标记为C(消费者)或P(生产者),第三字段是表示生产/消费时间,对于C,之后的字段表示它使用哪些生产者(以线程序号表示)的产品

示例:

第3页 / 共22页

夏磊 S1048035 2010级秋季班

5 1 P 3 2 P 4 3 C 4 1 4 P 1 5 C 2 1 2 4 1.3 设计思路 1.3.1 程序流程图 第4页 / 共22页 主函数 初始化缓冲区,消费请求队列及部分同步对象 消费者 N 生产者 N 有消费请求? Y 存在空缓冲区? Y 提取线程信息 此请求可满足? Y N 另一生产者正在生产? N Y 完成线程相关同步对象的初始化 确定产品位置 进入临界区 (所有生产者之间互斥) Y 此产品正被消费? 创建线程模拟生产和消费 N 从空缓冲区中为本生产者的产品分配一个空间 进入临界区(对同一产品进等待所有线程结束 行请求的消费者之间互斥) 退出临界区 消费产品、并判断是否应该程序结束 释放产品所占缓冲区 在该缓冲区放入产品 退出临界区 通过信号量通知等待本产品的消费者 结束消费进程 结束生产进程 夏磊 S1048035 2010级秋季班

1.3.2 设计说明

在这次实验中定义的多个缓冲区不是环形循环的,并且不需要按序访问。其中生产者可以把产品放到某一个空缓冲区中,消费者只能消费被指定生产者生产的产品。本实验在测试用例文件中指定了所有生产和消费的需求,并规定当共享缓冲区的数据满足了所有有关它的消费需求后,此共享才可以作为空闲空间允许新的生产者使用。

本实验在为生产者分配缓冲区时各生产者之间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一个产品进行消费时才需要互斥,它们在消费过程结束时需要判断该消费者对象是否已经消费完毕并释放缓冲区的空间。

1.3.3 程序结构设计

在设计程序时主要有三个主体部分、三个辅助函数和一个数据结构。

其中主体部分为一个主函数main(),用于初始化缓冲区和各个同步对象,并完成线程信息的读入,最后根据该组的线程记录启动模拟线程,并等待所有线程的运行结束后退出程序;

生产者函数Produce()和消费者函数Consume(),生产者和消费者函数运行于线程中完成对缓冲区的读、写动作,根据此处生产消费的模型的特点,生产者和消费者之间通过使用同步对象实现了生产和消费的同步与互斥,是本实验的核心所在。

第5页 / 共22页

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4