操作系统实验一文档.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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 进入临界区(所冇牛产者 之间互斥) 满足? 此产品止被消费? 另一个生产 者止在写? 程序结朿 进入临界区(对同一产品 进行请求的消费者之间 互斥) 消费产甜.并判断是否应 该释放产品所占缓冲区 从空缓冲区中为本生产 者的产品分配一个空间 退出临界区 确定产品位置 在该缓冲区中写入产品 结束消费线程通过信号量通知等待本 产品的消费者 结束消费线程 通过信号量通知等

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档