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

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

ID:41717109

大小:82.38 KB

页数:7页

时间:2019-08-30

生产者与消费者问题(附源码)_第1页
生产者与消费者问题(附源码)_第2页
生产者与消费者问题(附源码)_第3页
生产者与消费者问题(附源码)_第4页
生产者与消费者问题(附源码)_第5页
资源描述:

《生产者与消费者问题(附源码)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系址实验报告专业网络工程班级08102学号姓名课程名称操作系统学年2010-2011学期下课程类别专业必修■限选□任选□实践口实验时间2010年"月3日实验名称实验一:生产者与消费者问题实验目的和要求全而理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。实验软硬件要求Pentium

2、

3、

4、450以上CPU64MB以上内存WINDOWSXPVisualC++6.0实验内容、方法和步骤(可附页)问题描述:一组生产者向一组消费者提供商品,共享一个冇界缓冲池,生产者向英中放入商品,消费者从屮取得商品。假定这些生产者利消费者互相等效,只耍缓冲

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

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

7、在消费产品Z前也要进行判断。二、设计流程图主要流程:1、生产者进程生产流程图,如图1所示图1生产者进程生产流程图2、消费者进程消费流程图,如图2所示图2消费者进程消费流程图三.数据定义boollock[4]={false,false,false,false};〃四把锁,分别对四个缓冲区进行控制intbuffer[4]={0A0,0);//缓冲区个数为4四、源程序1、生产者生产进程函数DWORDWINAPIProducer(LPVOIDlpParameter){while(true){for(intj=0;j<4;j++){if(buffer[j]==O)(

8、//找到空缓冲区if(lock

9、j]==false){//同步锁为false,可以进行操作lock[j]=true;//int®,防止其他线程操作此缓冲区if(buffcr[j]<1){//限定一个缓冲区只能存放-个资源++buffcr[j];〃模拟4:.产资源cout«"生产一个资源,放入缓冲区"vvjvv忡"«endl;lock

10、j]=false;//解锁break;//一次生产一个if(j=3){cout«n找不到空缓冲区,等待中。。”vvendl;Sleep(2000);)I))return0;}2、消费者消费进程函数DWORDWINAPICust

11、omcr(LPVOIDlpParamctcr){while(true)(for(inln=0;nv4;n++){if(buffer[n]==1){〃找到满缓冲区if(lock[n]==false){//同步锁为false,可以进行操作lock[n]Fue;//加锁,防止其他线程操作此缓冲区if(buffer[n]>=l){-buffer[n];//模拟消费资源cout«"消费一个资源,从缓冲区"vvnvv”中取出”vvendl;lock[n]=false;//解锁break;//—次生产一个1}Iif(n==3)(cout«"找不到满缓冲区,等待中。。“v

12、vendl;Sleep(2000);)1))3、主函数,创建5个进程,英屮3个生产者进程,2个消费者进程intmain(intargc,char*argv[]){HANDLEhandle⑶;DWORDdwl,dw2,dw3,dw4,dw5;//创建5个进程handle[0]=CreateThread(NULL,O.Producer,NULL,0,&dw1);handlc[l]=CrcatcThrcad(NULL,0.Produccr,NULL,0,&dw2);handle⑵=CreateThread(NULL,O,Producer,NULL,0,&dw3)

13、;handle[3]=CreateThread(NULL,0,Cu

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

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

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