蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > PDF文档下载
 

进程同步机制与互斥-生产者消费者问题

  • 资源ID:54719438       资源大小:774.95KB        全文页数:13页
  • 资源格式: PDF        下载权限:游客/注册会员    下载费用:5积分 【人民币5元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要5积分 【人民币5元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

进程同步机制与互斥-生产者消费者问题

学习中心学习中心 专专业业 年年级级年春/秋 季 学学号号 学学生生 题题目目 进程同步与互斥 生产者-消费者问题 1. 1.谈谈你对本课程学习过程中的心得体会与建议谈谈你对本课程学习过程中的心得体会与建议 转眼间,学习了一个学期的计算机操作系统课程即将结束。在这个学期中,通 过老师的悉心教导, 让我深切地体会到了计算机操作系统的一些原理和具体操作 过程。 在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关 于计算机方面的操作应用,并不了解其中的具体操作过程和实用性。通过这一学 期的学习,我才知道操作系统Operating System,简称 OS是管理计算机系统的 全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它 应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供 方便的、有效的、友善的服务界面。操作系统这门课程并不是教你如何使用操作 系统的,而是讲操作。总而言之,操作系统的一些原理在生活中都可以找到相应 的例子。结合生活中的例子,可以化抽象为具体,我们会更加清楚地了解到其原 理与操作过程。我觉得通过我们的不断学习,结合生活中的实际问题,我们就会 把操作系统学得更好。总体来说,通过这次的对操作系统的总结,有收获也有遗 憾、不足的地方,但我想,我已经迈入了操作系统的大门,只要我再认真努力的 去学习,去提高,肯定能让自己的知识能力更上一层楼. 第1页 / 共13页 1 1设计思路及主要代码分析设计思路及主要代码分析 1.11.1 设计思路设计思路 在这次设计中定义的多个缓冲区不是环形循环的, 并且不需要按 序访问。其中生产者可以把产品放到某一个空缓冲区中, 消费者只能 消费被指定生产者生产的产品。 本设计在测试用例文件中指定了所有 生产和消费的需求, 并规定当共享缓冲区的数据满足了所有有关它的 消费需求后,此共享才可以作为空闲空间允许新的生产者使用。 本设计在为生产者分配缓冲区时各生产者之间必须互斥, 此后各 个生产者的具体生产活动可以并发。 而消费者之间只有在对同一个产 品进行消费时才需要互斥, 它们在消费过程结束时需要判断该消费者 对象是否已经消费完毕并释放缓冲区的空间。 第2页 / 共13页 1.21.2 程序流程图程序流程图 结束消费进程结束消费进程 主函数主函数 初始化缓冲区,消费请求 队列及部分同步对象 消费者消费者 N 生产者生产者 N 有消费请求 Y 存在空缓冲区 Y 提取线程信息 此请求可满足 Y N 另一生产者正在生产 N Y 完成线程相关同步对象的 初始化 确定产品位置 Y 进入临界区 (所有生产者之间互斥) 此产品正被消费 创建线程模拟生产和消费 N从空缓冲区中为本生产者 的产品分配一个空间 进入临界区(对同一产品进 等待所有线程结束 行请求的消费者之间互斥) 退出临界区 消费产品、并判断是否应该 程序结束程序结束 释放产品所占缓冲区在该缓冲区放入产品 退出临界区通过信号量通知等待本产 品的消费者 结束生产进程结束生产进程 第3页 / 共13页 1.31.3基本内容 基本内容 在设计程序时主要有三个主体部分、 三个辅助函数和一个数据结 构。 其中主体部分为一个主函数 main() ,用于初始化缓冲区和各个 同步对象,并完成线程信息的读入,最后根据该组的线程记录启动模 拟线程,并等待所有线程的运行结束后退出程序; 生产者函数 Produce()和消费者函数Consume() ,生产者和消 费者函数运行于线程中完成对缓冲区的读、 写动作,根据此处生产消 费的模型的特点, 生产者和消费者之间通过使用同步对象实现了生产 和消费的同步与互斥,是本实验的核心所在。 另外三个辅助性函数被生产者和消费者函数调用, 是上述生产和 消费函数中对缓冲区进行的一系列处理。 定义一个数据结构,记录在测试文件中指定的每一个线程的参 数。 1用一个整型数组 Buffer_Critical 来代表缓冲区。 不管是生产 产品还是对已有的产品的消费都需要访问该组缓冲区。 2进程信息 ThreadInfo 数据结构,包含线程的各个信息。 struct ThreadInfo { int serial;//线程序列号 char entity;//是 P 还是 C double delay;//线程延迟 int thread_request[MAX_THREAD_NUM];//线程请求队列 第4页 / 共13页 int n_request;//请求个数 }; 3在实现本程序的消费生产模型时, 具体的通过如下同步对象实 现互斥 ①设一个互斥量 h_mutex,以实现生产者在查询和保留缓冲 区内的下一个位置时进行互斥。 ②每一个生产者用一个信号量与其消费者同步,通过设置 h_Semaphore[MAX_THREAD_NUM]信号量 ③数组实现,该组信号量用于相应的产品已产生。同时用一 个表示空缓冲区数目的信号量 empty_semaphore 进行类似的同步, 只是缓冲区中是否存在空位置,以便开始生产下一个产品。 ④每一个缓冲区用一个同步对象实现该缓冲区上消费者之间 的互斥, 这通过设置临界区对象数组 PC_Crilical[MAX_BUFFER_NUM] 实现。 1.41.4 程序代码程序代码 include include include include include include define MAX_BUFFER_NUM10 define INTE_PER_SEC 1000 define MAX_THREAD_NUM64 第5页 / 共13页 //定义一个结构,记录在测试文件中指定的每一个线程的参数 struct ThreadInfo { //进程信息 ThreadInfo 数据结构,包含线程的各个信息 intserial;//线程序列号 char entity;//是 P 还是 C int delay;//线程延迟 int thread_request[MAX_THREAD_NUM];//线程请求队列 int n_request;//请求个数 }; //每一个缓冲区用一个同步对象实现该缓冲区上消费者之间的互斥,这通过设置临界 区对象数组 PC_Crilical[MAX_BUFFER_NUM]实现。 CRITICAL_SECTIONPC_Critical [MAX_BUFFER_NUM]; //用一个整型数组 Buffer_Critical 来代表缓冲区。 不管是生产产品还是对已有的产品 的消费都需要访问该组缓冲区。 int Buffer_Critical[MAX_BUFFER_NUM]; HANDLEh_Thread[MAX_THREAD_NUM]; ThreadInfo Thread_Info[MAX_THREAD_NUM]; //设一个互斥量 h_mutex,以实现生产者在查询和保留缓冲区内的下一个位置时进行 互斥。 HANDLE h_mutex; // 每 一 个 生 产 者 用 一 个 信 号 量 与 其 消 费 者 同 步 , 通 过 设 置 h_Semaphore[

注意事项

本文(进程同步机制与互斥-生产者消费者问题)为本站会员(sunhongz123)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开