- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编号:
版本: 1.0—
生产者消费者问题及死锁问题的解决
一基于Windows实验环境
复查
批准
签名_杨海龙
签名—杨海龙
签名—杨海龙
2007年 3 月 210
2007年 3 月 210
2007年 3月 210
小组成员:
学号
姓名杨海龙
二?实验目的:
1? 掌握基本的同步互斥的算法,理解生产者消费者模型。
了解WindowsXP的并发机制,线程间的同步互斥。
学习使用Windows相关的API
三.实验总体结构:
生产者消费者问题阐述
生产者与消费者是一个由广义同步问题抽象得来的模型,计算机系统中的许多 问题都可归结为生产者与消费者问题。生产者与消费者可以通过一个环形缓冲池联 系起来,环形缓冲池由几个大小相等的缓冲块组成,每个缓冲块容纳一个产品。每 个生产者都可不断地每次往缓冲池中送一个生产的产品,而每个消费者则可不断地 每次从缓冲池中取出一个产品。这里既存在合作同步的问题,也存在临界区互斥问 题。当缓冲池全满时,表示供过于求,生产者必须等待,同时唤醒消费者;当缓冲 池全空时,表示供不应求,消费者应等待,同时唤醒生产者。这是相互合作同步。 而缓冲池显然是临界资源,所有生产者与消费者都要使用它,而且都要改变它的状 态,故关于缓冲池的操作必须是互斥的。
根据本实验的要求,对缓冲区进行的使用进行简化,不要求按顺序进行访问,只要 共享缓冲区有空闲空间,生产者即可使用共享缓冲区。某一生产者生产一个产品后, 可能不止一个消费者,或者一个消费者多次地请求消费该产品。此时,只有当所有 的消费需求都被满足以后,该产品所在的共享缓冲区才可以被释放,并作为空闲空 间允许新的生产者使用。每个消费者线程的各个消费需求之间存在先后顺序。要求 在每个线程发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示 信息。
2? 测试文件说明
本实验将生产者与消费者的信息存入测试用例文件“test.txt”。
第一行只有一个数字,说明程序屮设置的临界区的数量; 第二行开始所有行分别描述一个生产者或消费者线程的信息,各字间用Tab键隔开, 每行第一个字段是数字表示生产者或消费者的编号;第二个字段是字母P或C,表示 生产者或消费者;第三个字段是数字表示在进入相应线程后,在进行生产和消费动 作前的等待时间,以秒计时;以上三个字段即包含了生产者的全部信息,但若是代 表消费者,在该行后面还加上若干字段,表示消费者所要求产品的生产者的编号。
U!
1? 数据结构说明
用一个整型数组Buffer_Critical来代表缓冲区,生产者和消费者都要访问该 缓冲区。程序屮使用了一个Threadinfo结构的数组Thread_Info,其中Threadinfo 是一个自定义的结构,用来记录一条线程的信息。在此消费生产模型中,主要通过 以下的同步对象来实现互斥:
设一个互斥量h_mutex,以实现生产者在查询和保留缓冲区内的下一个
空位置时进行互斥;
每一个生产者用一个信号量与其消费者同步,通过设置
h_Semaphore[MAX_THREAD_NUM]信号量用于表示相应产品已生产。同时用一 个表示空缓冲我数目的信号量empty_semaphore进行类似的同步,指示缓冲区中 是否存在空位置,以便开始生产下一个产品;
每一个缓冲区用一个同步对象实现该缓冲区上消费者之间的互斥,这通 过设置临界区对象数组PC_Critical[MAX_BUFFER_NUM]实现。
程序结构图
主函数初始化缓冲区、消费请求队列及部分同步对象提取线程信息完成线程相关同步对象的初始化消费者此请求可交换HI I t 各阻塞AN创建线程模拟牛产和消费等待所有线程结束牛产者NN有消费请求?阻塞Y此请求可浦足?阻塞Y阻塞确定产品位置YN进入临界区(所冇牛产者 之间互斥)满足?此产品止被消费?另一个生产者止在写?程序结朿进入临界区(对同一产品进行请求的消费者之间互斥)消费产甜.并判断是否应该释放产品所占缓冲区
主函数
初始化缓冲区、消费请求队列及部分同步对象
提取线程信息
完成线程相关同步对象的初始化
消费者
此请求可
交
换
HI I t 各
阻塞
A
N
创建线程模拟牛产和消费
等待所有线程结束
牛产者
N
N
有消费请求?
阻塞
Y
此请求可浦足?
阻塞
Y
阻塞
确定产品位置
Y
N
进入临界区(所冇牛产者 之间互斥)
满足?
此产品止被消费?
另一个生产
者止在写?
程序结朿
进入临界区(对同一产品进行请求的消费者之间互斥)
消费产甜.并判断是否应该释放产品所占缓冲区
从空缓冲区中为本生产 者的产品分配一个空间
退出临界区
确定产品位置
在该缓冲区中写入产品
结束消费线程通过信号量通知等待本产品的消费者
结束消费线程
通过信号量通知等
您可能关注的文档
最近下载
- 执业药师继续教育《前列腺癌常见其他治疗进展》习题答案.docx VIP
- 高一作文巧遇(2篇).docx VIP
- 人人峨嵋台地北缘断裂晚第四纪活动性.pdf VIP
- 肺淋巴瘤的影像诊断最全PPT【45页】.pptx VIP
- 血液透析中空气栓塞应急预案.ppt VIP
- 材料力学(刘鸿文主编).pdf VIP
- 2024-2025学年河北省保定市竞秀区北京师大保定实验学校八年级(上)月考数学试卷(9月份)(原卷全解析版).doc VIP
- Toshiba东芝软水机TS10-01 TS15-01 TS20-01用户手册.pdf
- 娄景书(娄景书).doc VIP
- 人教版高中英语新教材必修2单词默写表.docx VIP
文档评论(0)