好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

学习中心: 专 业: 年 级: 年 春/秋 季 学 号: 学 生:

题 目:进程同步与互斥 生产者-消费者问题

1.谈谈你对本课程学习过程中的心得体会与建议?

转眼间,学习了一个学期的计算机操作系统课程即将结束。在这个学期中,通过老师的悉心教导,让我深切地体会到了计算机操作系统的一些原理和具体操作过程。在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,并不了解其中的具体操作过程和实用性。通过这一学期的学习,我才知道操作系统(Operating System,简称OS)是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。操作系统这门课程并不是教你如何使用操作系统的,而是讲操作。总而言之,操作系统的一些原理在生活中都可以找到相应的例子。结合生活中的例子,可以化抽象为具体,我们会更加清楚地了解到其原理与操作过程。我觉得通过我们的不断学习,结合生活中的实际问题,我们就会把操作系统学得更好。总体来说,通过这次的对操作系统的总结,有收获也有遗憾、不足的地方,但我想,我已经迈入了操作系统的大门,只要我再认真努力的

去学习,去提高,肯定能让自己的知识能力更上一层楼.

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

设计思路

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

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

程序流程图

结束消费进程 主函数 初始化缓冲区,消费请求队列及部分同步对象 消费者 N 生产者 N 有消费请求? Y 存在空缓冲区? Y 提取线程信息 此请求可满足? Y N 另一生产者正在生产? N Y 完成线程相关同步对象的初始化 确定产品位置 Y 进入临界区 (所有生产者之间互斥) 此产品正被消费? 创建线程模拟生产和消费 N 从空缓冲区中为本生产者的产品分配一个空间 进入临界区(对同一产品进等待所有线程结束 行请求的消费者之间互斥) 退出临界区 消费产品、并判断是否应该程序结束 释放产品所占缓冲区 在该缓冲区放入产品 退出临界区 通过信号量通知等待本产品的消费者 结束生产进程 基本内容

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

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

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

另外三个辅助性函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区进行的一系列处理。

定义一个数据结构,记录在测试文件中指定的每一个线程的参数。

1) 用一个整型数组Buffer_Critical来代表缓冲区。不管是生产产品还是对已有的产品的消费都需要访问该组缓冲区。

2) 进程信息ThreadInfo数据结构,包含线程的各个信息。

struct ThreadInfo { int serial; hread_request[k]=-1; Thread_Info[j].n_request=0; } erial; inFile>>Thread_Info[n_Thread].entity; inFile>>Thread_Info[n_Thread].delay; char c; (c); while(c!='\\n'&& !()) { inFile>>Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_request++]; (c); } n_Thread++; } erial; char Temp_entity=Thread_Info[j].entity; int Temp_delay=Thread_Info[j].delay; printf(\线程- %c %d \Temp_serial,Temp_entity,Temp_delay); int Temp_request=Thread_Info[j].n_request; for(int k=0;k

C5

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

学习中心:专业:年级:年春/秋季学号:学生:
推荐度:
点击下载文档文档为doc格式
3ijex12nmt2xn8u9whcj4n25q6ny0j004hg
领取福利

微信扫码领取福利

微信扫码分享