多进程同步方法解决生产者-消费者问题

多进程同步方法解决生产者-消费者问题

ID:2165062

大小:195.50 KB

页数:15页

时间:2017-11-15

多进程同步方法解决生产者-消费者问题_第1页
多进程同步方法解决生产者-消费者问题_第2页
多进程同步方法解决生产者-消费者问题_第3页
多进程同步方法解决生产者-消费者问题_第4页
多进程同步方法解决生产者-消费者问题_第5页
资源描述:

《多进程同步方法解决生产者-消费者问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、课程设计报告课程名称:操作系统实验题目:用多进程同步方法解决生产者-消费者问题院系:计算机科学与工程学院班级:姓名:学号:指导老师:一、概述:1、问题描述:用多进程同步方法解决生产者-消费者问题设计目的:通过研究Linux的进程机制和信号量实现生产者消费者问题的并发控制.说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数.设计要求:1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.2)生产者和消费者各有两个以上

2、.3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.2、程序设计基本思想:生产者—消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。n一个有限空间的共享缓冲区,负责存放货物。n生产者向缓冲区中放物品,缓冲区满则不能放。n消费者从缓冲区中拿物品,缓冲区空则不能拿。因为有多个缓冲区,所以生产者线程没有必要在生成新的数据之前等待最后一个数据被消费者线程处理

3、完毕。同样,消费者线程并不一定每次只能处理一个数据。在多缓冲区机制下,线程之间不必互相等待形成死锁,因而提高了效率。多个缓冲区就好像使用一条传送带替代托架,传送带上一次可以放多个产品。生产者在缓冲区尾加入数据,而消费者则在缓冲区头读取数据。当缓冲区满的时候,缓冲区就上锁并等待消费者线程读取数据;每一个生产或消费动作使得传送带向前移动一个单位,因而,消费者线程读取数据的顺序和数据产生顺序是相同的。可以引入一个count计数器来表示已经被使用的缓冲区数量。用Producer和Consumer来同步生产者和消费者线程

4、。每当生产者线程发现缓冲区满(count=BufferSize),它就等待Consumer事件。同样,当消费者线程发现缓冲区空,它就开始等待Producer。生产者线程写入一个新的数据之后,就立刻发出Consumer来唤醒正在等待的消费者线程;消费者线程在读取一个数据之后,就发出Producer来唤醒正在等待的生产者线程。通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地,只要缓冲区未空,消

5、费者就可以从缓冲区中去走产品并消费它。应该禁止生产者向满的缓冲区送入产品,同时也应该禁止消费者从空的缓冲区中取出产品,这一机制有生产者线程和消费者线程之间的互斥关系来实现。二、图形描述及算法:m个生产者、k个消费者、共享n个单元缓冲区基本算法如下:-varB:array[0..n-1]ofinteger;Empty:g_hFullSemaphore:=SIZE_OF_BUFFER;/*可以使用的空缓冲区数*/Full:g_hEmptySemaphore:=0;/*缓冲区内可以使用的产品数*/Mutex:sema

6、phore:=1;in,out:integer:=0;/*放入/取出缓冲区指针*/ cobeginprocessproducer_I(I=1,2,…,m)processconsumer_j(j=1,2,…,k)BeginbeginL1:produceaproduct;L2:P(Full);//对资源信号量与互斥信号量//P操作生产消耗一个缓冲区P操作,申请资源P(Empty);P(Mutex);P(Mutex);Product:=B[out];B[in]:=product;out:=(out+1)modn;in

7、:=(in+1)modn;V(Mutex);V(Mutex);V(Empty);V(Full);Consumeaproduct;GotoL1;GotoL2;end;end;Coend 三、程序流程图:4.1、生产者流程结构:生产者线程开始资源信号量P操作互斥信号量P操作生产一个产品把产品送入缓冲区互斥信号量V操作资源信号量V操作等待队列中有消费者线程等待队列中有消费者线程线程自我阻塞添加到等待队列线程自我阻塞添加到等待队列未通过未通过通过通过唤醒对头的消费者线程唤醒对头的消费者线程生产者线程结束YYNN4.2消

8、费者流程结构:消费者线程开始资源信号量P操作互斥信号量P操作从缓冲区取出一个产品消费一个产品互斥信号量V操作资源信号量V操作等待队列中有生产者线程等待队列中有生产者线程线程自我阻塞添加到等待队列线程自我阻塞添加到等待队列未通过未通过通过通过唤醒对头的生产者线程唤醒对头的生产者线程消费者线程结束YYNN四、数据结构及部分函数描述a)用一个整型数组Buffer_NUM来代表缓冲区。生产产品

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。