生产者消费者模拟.docVIP

  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文档。上传文档
查看更多
生产者消费者模拟

青岛理工大学 操作系统课程设计报告 院(系): 计算机工程学院 专 业: 计算机网络网络工程专业 学生姓名: 任玉发 班级: 网络072班 学号: 200707160  题目: 模拟仿真“生产者-消费者”问题 起迄日期: ___ 2011.02.22-2011.03.07 _ 设计地点:  计算机学院机房 指 导 教 师: 熊晓芸 2010—2011年度 第 2 学期 完成日期: 2011 年 3 月 7 日 一、课程设计目的 编写程序实现模拟生产者消费者问题使自己更加了解操作系统对线程的调度顺序,以 及系统对临界资源的互斥访问的实现。同时也使自己掌握常用Windows操作系统对线程,以及进程的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的了解和掌握,从而充分理解系统调用与程序设计之间的关系。 通过此次课程设计使自己了解Windows xp中关于临界资源的使用机制,掌握了各进 程之间的制约关系以及协同关系。 二、课程设计内容 用多进程同步方法演示“生产者-消费者”问题 1、说明:有界缓冲区内设有 20个存储单元,放入取出的产品设定为1-20个整数。 2、设计要求: 1) 生产者与消费者均有二个以上 2) 生产者和消费者进程的数目在程序界面上可调 3) 生产者的生产速度与消费者的消费速度均可在程序界面调节 4) 多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码 5) 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、 当前生产者与消费者的指针位置,以及生产者和消费者线程标识符 三、系统分析与设计 1、系统分析: 在学习进程互斥中,生产者-消费者问题是一个经典的,具有代表性的进程同步问题。 一个有限缓冲池和两类线程,它们是生产者和消费者,生产者把产品放入缓冲区,相反消费者便是从缓冲区中拿走产品。两个线程对同一有限缓冲区的互斥访问是该问题有很大的代表性以及使用价值的根本原因。 该问题可以用三种方法实现,第一种是利用记录型信号量机制解决,第二种是利用AND信号量机制解决,第三种是利用管程机制解决。本程序使用第一种方式实现。 假定在生产者和消费者之间有一个大小为100的缓冲区,这时可利用互斥信号量wait来实现诸进程对缓冲池的互斥使用。利用信号量empty表示缓冲区中空缓冲区的数量。对缓冲池的访问有如下规则:只用缓冲区未满,生产者便可对其进行访问,但只能有一个生产者进行访问,其他不能进行访问;只要缓冲区未空,消费者便可对其进行消费取走商品,且可以有多个消费者同时进行消费。 生产者在缓冲区满时必须等待,直到缓冲区有空间才继续生产。同时当有另一生产者进行对缓冲池访问时也必须等待。消费者在缓冲区空时必须等待,直到缓冲区中有产品才能继续消费。 2、系统设计: 程序的整个过程如下图所示,主界面时可以选择不同的登录界面,在选择生产者登录界 面时,根据不同的需要进行修改。在登录消费者界面时,也可以根据不同的选择进行更改变量,同时进行数据的更新。 图A.1 图A.1 主程序的简要流程 程序启动 调节速度,启动仓库 进行与身份相对应的操作 更新数据 3、模块设计: 系统界面分为生产者界面和消费者界面,不同界面为不同用户使用。以下是不同用户的使用设计。 各程序模块之间的调用关系如下图所示: 系统主界面 系统主界面 程序参数设置 信息显示 更新数据 图A.2 模块之间的调用关系图 (1)信号量初始化模块 生产者消费者中使用了两个同步信号量和一个互斥信号量定义了。同步信号量empty_sem初值为20,sem_init(empty_sem, 0, 20),full_sem初值为0,sem_init(full_sem, 0, 0),用默认属性初始化一个互斥锁对象pthread_mutex_init (mutex,NULL)。 (2)生产者线程模块 使用变量countp进行while循环的控制,当countp20时进入while循环。在循环中判断同步信号量empty_sem和互斥信号量mutex,使用语句sem_wait(empty_sem), pthread_mutex_lock(mutex)。然后生产数据,放入缓冲区中。用指针in控制放入缓冲区的位置,用countp++进行循环的控制。 (3)消费者线程模块 使用变量countc进行w

文档评论(0)

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

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

1亿VIP精品文档

相关文档