生产者与消费者问题(附源码)

上传人:新** 文档编号:493532479 上传时间:2023-01-27 格式:DOCX 页数:7 大小:113.17KB
返回 下载 相关 举报
生产者与消费者问题(附源码)_第1页
第1页 / 共7页
生产者与消费者问题(附源码)_第2页
第2页 / 共7页
生产者与消费者问题(附源码)_第3页
第3页 / 共7页
生产者与消费者问题(附源码)_第4页
第4页 / 共7页
生产者与消费者问题(附源码)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《生产者与消费者问题(附源码)》由会员分享,可在线阅读,更多相关《生产者与消费者问题(附源码)(7页珍藏版)》请在金锄头文库上搜索。

1、操作系统实验报告专业网络工程 班级08102学号姓名课程名称操作系统学年 20102011学期下课程类别 专业必修限选任选实践口 实验时间2010年11月3日 = 实验名称实验一:生产者与消费者问题实验目的和要求全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。实验软硬件要求Pentium Ill 450 以上 CPU 64MB 以上内存WINDOWS XPVisual C+6.0实验内容、方法和步骤(可附页)问题描述:一组生产者向一组消费者提供商品,共享一个有界缓冲池,生产者向其中放入商品,消费者从中 取得商品。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者

2、可将商品送入缓冲池;只要缓冲池未空, 消费者可从缓冲池取走一商品。功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放商品、取商品等过程。 具体参数:3个生产者进程,2个消费者进程;缓冲区单元个数N=4;在本程序中是缓冲区中的数从0变为1表示模拟生产一个产品,消费时则将对应缓冲区内的1变为0,为模 拟消费一个产品。实验结果(可附页)见截图小结这次多线程的操作系统实验,使我对线程的概念以及多线程程序中线程间的运行有了更深的认识,同时也让我 的编程能力得到了一定的提高。这次做的用多线程实现生产者与消费者模型的实验,由于我的编程能力基础比较差,对线程也是一无所知,所 以一开始

3、觉得无从下手,但幸好老师给了充足的时间,我通过看网上找的视频资料以及请教同学才渐渐地有了一点 概念,然后我试着从网上下了一些多线程的程序分析里面的语句,基本弄懂了多线程的原理。评定成绩:批阅教师:年 月 日一、问题概述三个生产者向两个消费者提供消息,它们共享一个有界缓冲池,缓冲池有四个缓冲区,生产者向其中 投放消息,消费者从中取得消息。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息 送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。每个缓冲设有一个所标记,生产者在生 产产品以前要先判断缓冲区是否已上锁,消费者在消费产品之前也要进行判断。二、设计流程图主要流程:1、 生产

4、者进程生产流程图,如图 1 所示图 1 生产者进程生产流程图2、消费者进程消费流程图,如图 2 所示否是是否该缓冲区是否 己上锁?阻塞对该缓冲区上锁模拟消费解锁结束Jr开1始丿1r是否有满缓冲区?图 2 消费者进程消费流程图三、数据定义bool lock4=false,false,false,false;四把锁,分别对四个缓冲区进行控制int buffer4=0,0,0,0;缓冲区个数为 4四、源程序1、生产者生产进程函数 DWORD WINAPI Producer(LPVOID lpParameter)while(true) for(int j=0;j4;j+) if(bufferj=O)找

5、到空缓冲区if(lockj=false)同步锁为false,可以进行操作 lockj=true;/加锁,防止其他线程操作此缓冲区 if(bufferjl)限定一个缓冲区只能存放一个资源+bufferj;模拟生产资源cout生产一个资源,放入缓冲区j中endl; lockj=false; 解锁 break;/ 一次生产一个 if(j=3)cout找不到空缓冲区,等待中。endl;Sleep(2000);return 0;2、消费者消费进程函数DWORD WINAPI Customer(LPVOID lpParameter)while(true)for(int n=0;n=l)-buffern;模

6、拟消费资源cout消费一个资源,从缓冲区n中取出endl; lockn=false; 解锁 break;/ 一次生产一个if(n=3)cout找不到满缓冲区,等待中。”lir -IJL- 个个空空个个. _ - 一 一 产产不不费费多个生产者于多个消费者进行生产消费操作:出M-取0 1n3 2 * *nD0 2 1DnHD一 区区叭区区区:笄区区E时汴亠匸 尸尸ffD 口区区区区E 入更入入OWKA人出出 出出出出一 取取Jw-i0雷 B-B-2-B- fiwEr0 2 3 111* + * 弘区区!* + .?忙d于-HHA空-1-个个个帚H二一二一剽一产产费产产产不石费费产产产痔一二一二一

7、附:#include iostream.h#include windows.h #include stdio.hbool lock4=false,false,false,false;四把锁,分别对四个缓冲区进行同步 int buffer4=0,0,0,0;缓冲区,表示资源的个数void display()coutendl;coutvv缓冲区0123vvendl;for(int i=0;i4;i+)coutbufferi;coutendl;DWORD WINAPI Producer(LPVOID lpParameter) while(true)for(int j=0;j=1)-buffern;/

8、模拟消费资源coutvv消费一个资源,从缓冲区” vvnvv”中取出vvendl; lockn=false;解锁break;/次生产一个if(n=3)coutvv找不到满缓冲区,等待中。vvendl;Sleep(2000);return 0;int main(int argc,char* argv)display();HANDLE handle3;DWORD dw1,dw2,dw3,dw4,dw0;handle0=CreateThread(NULL,0,Producer,NULL,0,&dw1);handle1=CreateThread(NULL,0,Producer,NULL,0,&dw2);handle2=CreateThread(NULL,0,Producer,NULL,0,&dw3);handle3=CreateThread(NULL,0,Customer,NULL,0,&dw4);handle4=CreateThread(NULL,0,Customer,NULL,0,&dw0);display();Sleep(3000);display();return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号