PV操作解决生产者——消费者问题.pdf

PV操作解决生产者——消费者问题.pdf

ID:58311572

大小:466.50 KB

页数:17页

时间:2020-05-31

PV操作解决生产者——消费者问题.pdf_第1页
PV操作解决生产者——消费者问题.pdf_第2页
PV操作解决生产者——消费者问题.pdf_第3页
PV操作解决生产者——消费者问题.pdf_第4页
PV操作解决生产者——消费者问题.pdf_第5页
资源描述:

《PV操作解决生产者——消费者问题.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、计算机科学与技术系课程设计报告课程名称:操作系统原理课程设计名称:PV操作解决生产者——消费者问题专业班级:12级网工2班学生姓名:学生学号:指导教师:2014年12月-1-一、实验目的1、了解进程PV操作的过程2、了解生产者和消费者的工作过程3、理解进程同步机构的作用和意义二、实验内容模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。三、实验步骤(1)任务分析本实验要求利用PV操作实现解决生产者——消费者问题中的同步问题。我们先假定有一个消费者和一个生产者,它们共同享有一个缓冲区,缓冲区的大

2、小一定,生产者可以生产产品放入缓冲区,消费者也可以从缓冲区中取出产品进行消费,但是存在两种情况是不被允许的:一是缓冲区已满,消费者不在消费,生产者就会产生等待情况并唤醒消费者进程,直到消费者开始消费缓冲区不为满时生产者才可以继续生产;二是缓冲区为空,生产者暂停生产时,消费者出现等待情况并唤醒生产者进程,直到生产者继续生产,缓冲区不为空时,消费者才可以继续消费。本程序实现的功能是可以利用生产者进程进行生产,同时消费者进程也能进行消费,但是必须满足同步的条件才可以允许,否则将提示缓冲区满无法进行生产或者缓冲

3、区空无法进行消费的错误,故程序应该具有判断的功能。若结束当前的生产者——消费者进程,将会提示此次进程中生产消费者分别生产了和消费的产品数目,并统计缓冲区中剩余的产品数目,最后才结束。(2)概要设计本函数主要用到生产者函数RP-ProceducerThread(void*p)来实现缓冲区产品数量的增加,消费者函数用RP-ConsumerThread(void*p)来实现缓冲区产品的减少。并用到了CreateThread函数来创建生产者消费者线程,利用线程的句柄以及创建线程是立刻运行的特点来进行生产消费操作

4、。通过random随机函数来随机控制生-2-产者消费者进程。随机数0执行生产者线程,随机数1执行生产者线程。至于PV算法的实现是利用buffer_empty和buffer_full来进行控制,buffer_empty的值可以看做资源量,只有空的数值大于0才可以进行生产,buffer_full的数值与buffer_empty的值有对应的关系,利用buffer_full来控制消费的进行。最后,在缓冲区操作临界资源PC_Buffer来说利用EnterCriticalSection(&PC_Buffer);//

5、等待共享资源LeaveCriticalSection(&PC_Buffer);//释放共享资源来进行缓冲区操作的控制。总之当程序读入测试文件中的数据时,便根据读入的字符时C还是P创造相应的进程,在分配EMPTY或者FULL资源,然后等待共享资源PC_Buffer,得到后便进行操作。最后读入所有的数据,完成所有进程的操作。(3)详细设计1、做出如下定义publicclassTest2extendsJFrame{//面板1-3-privateJPanelpanel1=newJPanel();//面板2pri

6、vateJPanelpanel2=newJPanel();privateJPanelpanel3=newJPanel();//线程1privatestaticThreadthreadWQ1;//线程2privatestaticThreadthreadRQ1;//文本域,可编辑多行文字的publicstaticJTextAreatextarea;//可以编辑多行//文本框,只能编辑一行publicstaticJTextFieldtextbox;//只可以编辑一行//滚动条publicstaticJScro

7、llPanescrollpane;//滚动条//进度条publicJProgressBarprogressbar=newJProgressBar();//进度条//队列QueueQ=newQueue();//实例化生产者ProducerwQ1=newProducer(Q);//实例化消费者ConsumerrQ1=newConsumer(Q);//接口publicinterfaceputmsg{publicvoidoutput(Stringmsg,JTextAreatextaera,JProgressBa

8、rjbr);publicvoidbuffer(JTextFieldnumber);}publicTest2(){//设置窗口大小setSize(600,600);//设置窗口的位置,距离左上角(100,100)setLocation(100,100);//设置默认关闭,右上角的的叉关闭setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//调用函数layoutPanel2()textbox=newJ

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

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

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