版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程名称:操作系统实验主题:通过多过程同步方法解决生产者-消费者问题本科:计算机科学与工程学院班级:名字:学位:指导老师:一、概要:1 .问题的说明:生产者-用多流程同步方法解决消费者问题通过研究:Linux的工艺机制和信号量,实现生产者消费者问题的同时控制在:有界缓冲器内有20个存储单元,出入的数据项目设定为1-20个整数.设计要求:1 )在各生产者和消费者操作有界缓冲器后,立即显示有界缓冲器的内容、当前的指针位置和生产者/消费者线程的标识符。2 )生产者和消费者各有两个以上3 )多个生产者或多个消费者之间必须共享操作缓冲区的函数代码2 .程序设计基本思想:生产者-消费者问题是同
2、步问题的抽象描述。计算机系统中的每个进程可以消耗或生产某些资源。 如果系统中的进程正在使用资源,则可以将其视为消费,这一进程称为消费者。一个过程释放资源,就成为生产者。n一个有限空间的共享缓冲区负责保管货物。n生产者把东西放在缓冲区,缓冲区满不了。n消费者从缓冲区取东西,缓冲区空着就取不到。由于有多个缓冲器,生产者线程不必等待消费者线程处理最后的数据,直到产生新的数据。 同样,消费者线程不一定一次只能处理一个数据。 多缓冲机制提高了效率,因为不需要在线程之间等待死锁。 多个缓冲区就像是使用一个传送带代替托盘一样架子、传送带上可以一次放多个产品。 生产者在缓冲器的末尾放入数据,消费者在缓冲器的开
3、头读取数据。 当缓冲器满时,缓冲器锁定并且等待消费者线程读取数据的每个生产或消费者操作将传送带向前移动一个单元,使得消费者线程读取数据的顺序与数据的生成顺序相同。可以引入count计数器来表示已经使用的缓冲区的数量。 在产品和消费者中同步生产者和消费者的线程。 每当发现生产者线程缓冲区已满(count=BufferSize ),就等待Consumer事件。 类似地,当消费者线程发现缓冲区中的空闲空间时,它开始等待产品。 生产者线程在写入新数据后,马上发出顾客,唤醒等待的消费者线程。消费者线程在读取了数据后,发出Producer,唤醒等待的生产者线程。用一个有界缓冲器连接生产者和消费者。 假定生
4、产者和消费者的优先级相同,只要缓冲器不满,生产者就可以生产产品并发送到缓冲器。 类似地,消费者可从缓冲器中去除产品并消耗产品,除非缓冲器是空闲的。 生产者应该禁止将产品送入装满的缓冲器,同时也应该禁止消费者从空缓冲器中取出产品,这种机制是通过生产者线程和消费者线程之间的排他性关系来实现的。二、图形说明和算法:m个生产者,k个消费者,共享n个小区缓冲区基本的算法如下所示。- varb :阵列0. n-1 整数版;empty : g _ hfullsemaphore :=size _ of _ buffer; /*可用的可用缓冲区数*/full : g _ hemptysemaphore :=0;
5、 /*缓冲区中可以使用的产品数*/Mutex :semaphore:=1;in,out:integer:=0; /*插入/取出缓冲指针*/cobegin流程制造商_ I (I=1,2,m )流程消费者_ j (j=1,2,k )Begin beginl 1:产品a产品; l 2: p (全)/资源信号量和排他信号量/P操作在生产上消耗缓冲器p操作,请求资源p (空) p (多路)p (多路)产品:=b 输出;b :=产品; out:=(out 1) mod n;in:=(in 1) mod n; V(Mutex )v (多重) v (企业)v (全)消费者a产品;Goto L1; Goto L
6、2;结束; 结束;Coend三、程序流程图:4.1、生产者的流程结构:生产者线程开始资源信号量p的操作排他信号量p操作生产产品把产品放在缓冲器里互斥信号量v操作资源信号量v操作排队有消费者线程排队有消费者线程线程的自阻塞添加到等待队列线程的自阻塞添加到等待队列不通过不通过通过通过唤醒敌人的消费者线程唤醒敌人的消费者线程生产者线程结束yynn4.2消费者过程结构:消费者线程的开始资源信号量p的操作排他信号量p操作从缓冲器中取出产品消费产品互斥信号量v操作资源信号量v操作排队有生产者线程排队有生产者线程线程的自阻塞添加到等待队列线程的自阻塞添加到等待队列不通过不通过通过通过唤醒头脑生产者线程。唤醒
7、头脑生产者线程。消费者线程的结束yynn四、数据结构和部分函数的记述a )缓冲区用整数数组Buffer_NUM表示。 产品生产和现有产品消费需要访问该组的缓冲区。缓冲区的大小和结构:结构缓冲器举止int productBUFFER_NUM; /缓冲器开始,结束; /2个指针相当于教材中的in out指针。g_buf;b )在实现本程序的消费生产模式时,具体通过以下同步对象实现互斥I .设定排他量Mutex,实现生产者在检索并保持缓冲器内的下一个空闲位置时进行排他。ii .各生产者通过用一个信号量与消费者同步地设定Full来实现,该组的信号量用于表示对应产品已生产。 同时,对表示空缓冲区数的信号
8、量Empty执行类似的同步,以指示缓冲区中是否有空位置开始生产下一个产品。在Windows中定义p操作# definep (s ) watforsingleobject (s,INFINITE )说明: WaitForSingleObject函数用于检测hHandle事件的信号状态,当线程调用时,线程暂时挂起,线程在挂起的dwMilliseconds毫秒内等待的对象如果函数立即返回的超时时间达到了dwMilliseconds毫秒,但hHandle指示的对象还没有处于信号状态,则函数以相同的方式返回。 参数dwMilliseconds有两个特殊的值: 0和INFINITE。 如果为0,函数将立即
9、返回。如果为INFINITE,线程将持续挂起,直到hHandle指向的对象处于信号状态。在Windows中定义v操作#定义v (s )发行说明(s,1,NULL )说明ReleaseSemaphore函数用于将指定的值添加到指定的信号量上e )生产者线程代码:dword winapi产品(lpvoid para )举止int i=*(int *)para - CONSUMER_NUM;PS PS;int data; /产品int j=0;while (j 4)举止data=rand()%8;“printfJICG”生产者d:3360 % s! n,I,thingdata;/等待收纳空间PR/有
10、位置,先锁定缓冲区PS/记录消费品ptr=g_buf.end;/移动缓冲指针g _ buf.end=(g _ buf.end1) % buffer _ num;printfJapan2222喀嚓喀嚓喀嚓喀嚓喀嚓喀嚓喀嚓6g_ductptr=data;/安装完毕后,发行产品/让其他消费者和生产者使用V(Mutex )v (完全)Sleep(rate/2*rand() 110 )以下返回0;以下c )消费者线程代码:dword winapi顾问(lpvoid para )举止/i表示第I个消费者int i=*(int *)para; 利用para传达现在的消费者号码int ptr;
11、/应该消费的内容的方针printf (消费者:需要资源 n ,I );int j=0;while (j 4)/等待产品p (完全)/有产品,先锁定缓冲区p (多功能)/记录消费品ptr=g_buf.start;/移动缓冲指针g _ buf.start=(g _ buf.start1) % buffer _ num;/让其他消费者和生产者使用printfJapan :消费者93360我要buf%/消耗完成,释放缓冲器“消费者d:我消费完了% 111111111111111111100000652V(Mutex )v (空间)Sleep(rate*rand() 110 )以下返回0;以下五、调试过
12、程:为了解决生产者/消费者的问题,必须设定两个资源信号量。 一个指示空缓冲器的数目,用Full表示,其中初始值是有界缓冲器的大小BUFFER_NUM,另一个指示缓冲器中的产品的数目,用Empty表示,并且初始值是0。 此外,有界缓冲器是临界资源,必须排他地使用,因此需要另一个排他的信号量Mutex,最初的值为1。在生产者/消费者问题上,信号量实现两种功能。 首先,在生产产品和消费产品的计数器中,计数器的初始值是可利用的资源数(有界缓冲器的长度)。 其次,是确保产品生产者和消费者之间动作同步的同步。当生产者生产产品时,首先对资源信号量Full和排他信号量Mutex进行p操作,申请资源。 如果可以通过,生产产品,把产品放在缓冲区。 然后,对互斥信号量Mutex和资源信号量Empty进行v操作,释放资源。当消费者消费产品时,首先对资源信号量Empty和排他信号量Mutex进行p操作,以申请资源。 如果可以通过的话,从缓冲器中取出产品来消费。 然后,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年井冈山经济技术开发区招聘2人参考笔试试题及答案解析
- 2026兴业银行呼和浩特分行校园招聘备考题库含答案详解(巩固)
- 2025重庆两江新区公安机关辅警招聘56人备考题库附答案详解(考试直接用)
- 2025年甘肃省定西市岷县招聘城镇公益性岗位人员12人参考笔试题库及答案解析
- 2025重庆渝北区人民政府宝圣湖街道办事处公益性岗位招聘备考题库含答案详解(a卷)
- 2025浦发银行郑州分行招聘备考题库(含答案详解)
- 2025重庆机床(集团)有限责任公司招聘3人备考考点题库及答案解析
- 2026中国建设银行云南省分行校园招聘330人备考题库附答案详解(夺分金卷)
- 2025山西临汾安泽县社区工作者招聘备考题库(27人)(含答案详解)
- 2025福建三明泰宁县杉城镇人民政府面向社会招聘社区工作人员2人备考题库含答案详解(典型题)
- 全国优质课一等奖初中语文八年级上册第14课《昆明的雨》课件
- 超高分子量聚乙烯复合材料UD布项目环境影响报告表
- GB/T 7901-2018黑胡椒
- GB/T 20241-2021单板层积材
- GB/T 1182-2018产品几何技术规范(GPS)几何公差形状、方向、位置和跳动公差标注
- 项目合作协议-非框架协议版
- 小品《你睡了没》台词剧本手稿
- (完整)辅警考试公安基础知识考试试题库及答案
- 网约车平台服务合作协议范本
- 170位真实有效投资人邮箱
- 中等职业教育专业目录(2022年)
评论
0/150
提交评论