生产者类论文范文资料,与计算机操作系统实验报告相关论文下载
本论文是一篇生产者类论文下载,关于计算机操作系统实验报告相关在职毕业论文范文。免费优秀的关于生产者及缓冲区及消费者方面论文范文资料,适合生产者论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
计算机操作系统实验报告
学院:信息科学与工程学院
班级:计科0501班
学号:0902050121
姓名:熊清亮
指导老师:胡小龙
2016.6.18
目录
一、实验目的2
二、实验内容2
三、开发环境2
四、分析设计2
1,实验要求2
2,设计原理3
3,涉及到的类5
4,流程图6
五、结果及分析8
1,运行示例8
2,结果分析9
六、心得体会9
七,参考文献10
实现生产者与消费者问题
实验目的在生产者与消费者问题在同一个进程地址空间内执行的两个线程.生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费.消费者线程从缓冲区中获得物品,然后释放缓冲区.当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区.当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来MicrosoftVisualC++6.0环境下的一个关于实现生产者与消费者问题的程序.用C++语言实现编程.
分析设计1,实验要求
生产者与消费者问题经典进程同步问题的典型代表基于单缓冲区和多缓冲区的生产者与消费者问题多种实现机制,其中利用了数据结构中的循环队列和堆栈来模拟实现这种想帮助更好的理解所学内容锻炼的动手实践能力,强的参考价值和实践意义-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制.计算机系统中的每个进程都可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者.而当某个进程释放资源时,则它就相当一个生产者.通过一个有界缓冲区把生产者和消费者联系起来.假定生产者和消费者是相互等效的,只要缓冲区未满,生产者就可以将产品送入缓冲区,类似地,只要缓冲区未空,消费者就可以从缓冲区中去走物品并消费它.生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品.在生产者—消费者问题中,信号灯具有两种功能.首先,它是跟踪资源的生产和消费的计数器,其次,它是协调资源的生产者和消费者之间的同步器.消费者通过再一指派给它的信号灯上做P操作来表示消耗资源,而生产者通过在同一信号灯上做V操作来表示生产资源.再这种信号灯的实施中,计数在每次P操作后减1,而在每次V操作中加1.个这一计数器的初始值是可利用的资源数目.当资源是不可利用时,将申请资源的进程放置在等待队列中.如果有一个资源释放,在等待队列中的第一个进程被唤醒并得到资源的控制权.为解决这一类生产者——消费者问题,设置两个同步信号灯,一个说明空缓冲区的数目,用empty表示,其初值为有界缓冲区的大小n,另一个说明缓冲区的数目,用full表示,其初制值为0.由于有界缓冲区是一个零界资源,必须互斥使用,所以另外还需设置一个互斥信号灯mutex,起初值为1.等等
inout
12345678n
有关论文范文主题研究: | 关于生产者的论文范文 | 大学生适用: | 学校学生论文、专科论文 |
---|---|---|---|
相关参考文献下载数量: | 21 | 写作解决问题: | 如何写 |
毕业论文开题报告: | 标准论文格式、论文设计 | 职称论文适用: | 核心期刊、高级职称 |
所属大学生专业类别: | 如何写 | 论文题目推荐度: | 免费选题 |
等等
inout
其中,in表示存数据位置,out表示取数据位置
::被占用单元:空存储单元
图生产者/消费者循环使用缓冲区
首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定.这显然是不允许的.所以,必须使生产者和消费者互斥进入缓冲区.即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者.
其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据,即生产者与消费者必须同步.当生产者产生出数据,需要将其存入缓冲区之前,首先检查缓冲区中是否有"空"存储单元,若缓冲区存储单元全部用完,则生产者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它.若缓冲区内有"空"存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释放缓冲区的使用权.消费者取数据之前,首先检查缓冲区中是否存在装有数据的存储单元,若缓冲区为"空",则阻塞等待,否则,判断缓冲区是否正在被使用,若正被使用,若正被使用,则阻塞等待,否则,获得缓冲区的使用权,进入缓冲区取数据,释放缓冲区的使用权.其执行流程如图所示,伪代码如图所示.
3,涉及到的类
classCProducerThread:publicCWinThread
{
DECLARE_DYNCREATE(CProducerThread)
protected:
CProducerThread(),//protectedconstructorusedbydynamiccreation
//Attributes
public:
CProducerThread(void*pParent,CStringname),
void*m_Parent,
CStringm_name,
//Operations
public:
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CProducerThread)
public:
virtualBOOLInitInstance(),
virtualintExitInstance(),
virtualintRun(),
//}}AFX_VIRTUAL
//Implementation
protected:
virtual~CProducerThread(),
//Generatedmessagemapfunctions
//{{AFX_MSG(CProducerThread)
//NOTE-theClassWizardwilladdandremovememberfunctionshere.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
},
classCConsumerThread:publicCWinThread
{
DECLARE_DYNCREATE(CConsumerThread)
protected:
CConsumerThread(),//protectedconstructorusedbydynamiccreation
//Attributes
public:
public:
CConsumerThread(void*pParent,CStringname),
void*m_Parent,
CStringm_name,
//Operations
public:
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CConsumerThread)
public:
virtualBOOLInitInstance(),
virtualintExitInstance(),
virtualintRun(),
//}}AFX_VIRTUAL
//Implementation
protected:
virtual~CConsumerThread(),
//Generatedmessagemapfunctions
//{{AFX_MSG(CConsumerThread)
//NOTE-theClassWizardwilladdandremovememberfunctionshere.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
},
4,流程图
无
有
否
图1生产者流程图
有
否
是
图2消费者流程图
结果及分析1,运行示例
图3运行程序
图4启动生产者
图5启动消费者
2,结果分析
此程序可自动输入生产者,消费者数目等条件,但程序执行过程中也进入了一种无限循环状态,采用GDI作图将生产和消费的关系很好的表现出来.
这篇论文url:http://www.sxsky.net/xie/070573579.html
心得体会
做实验之前虽然好多细节部分还不是太了解,但是对一个进程的流向和执行过程还是有个大概的认识,所以这个实验做起来也不是那么的困难.关于该算法的详细说明和实现在我们的教材上没有讲解.需要自己在网上和图书馆大量的找资料,先对那些算法有一个大致全面的了解.然后开始对那个算法的代码进行完善和修改,以达到自己的要求.经过几次实验į
生产者类论文范文资料,与计算机操作系统实验报告相关论文下载参考文献资料: