版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系址实验报告专业网络工程班级08102学号姓名课程名称操作系统学年2010-2011学期下课程类别 专业必修限选任选实践口 实验时间2010年"月3日 实验名称实验一:生产者与消费者问题实验目的和要求全而理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。实验软硬件要求pentium | 450 以上 cpu 64mb 以上内存windows xpvisual c+6.0实验内容、方法和步骤(可附页)问题描述:一组生产者向一组消费者提供商品,共享一个冇界缓冲池,生产者向英中放入商品,消费者从屮 取得商品。假定这些生产者利消费者互相等效,只耍缓冲池未满,生产者可
2、将商品送入缓冲池;只耍缓冲池未空, 消费者可从缓冲池取走-商品。功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放商品、取商品等过程。具体参数:3个生产者进程,2个消费者进程;缓冲区单元个数n=4;在本程序中是缓冲区中的数从0变为1表示模拟生产一个产品,消费时则将对应缓冲区内的1变为0,为模 拟消费一个产品。实验结果(可附页)见截图小结这次多线程的操作系统实验,使我对线程的概念以及多线程程序中线程间的运行冇了更深的认识,同时也让我 的编程能力得到了一定的提高。这次做的用多线程实现生产者与消费者模型的实验,由于我的编程能力基础比较差,对线程也是无所知,所 以一开始觉得无
3、从下手,但幸好老师给了充足的时间,我通过看网上找的视频资料以及请教同学才渐渐地有了一点 概念,然后我试着从网上下了一些多线程的程序分析里面的语句,基本弄懂了多线程的原理。评定成绩:批阅教师:一、问题概述三个生产者向两个消费者提供消息,它们共亨一个有界缓冲池,缓冲池有四个缓冲区,生产者向其中 投放消息,消费者从中取得消息。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息 送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。每个缓冲设有一个所标记,生产者在生 产产品以前要先判断缓冲区是否已上锁,消费者在消费产品z前也要进行判断。二、设计流程图主要流程:1、生产者进程生产流程图,
4、如图1所示图1生产者进程生产流程图2、消费者进程消费流程图,如图2所示图2消费者进程消费流程图三. 数据定义bool lock4=false,false,false,false;四把锁,分别对四个缓冲区进行控制int buffer4=0a0,0);/ 缓冲区个数为 4四、源程序1、生产者生产进程函数dword winapi producer(lpvoid lpparameter)while(true)for(int j=0;j<4;j+) if(bufferj=o)(/ 找到空缓冲区if(lock|j=false)/同步锁为false,可以进行操作 lockj=true;/int
5、4;,防止其他线程操作此缓冲区 if(buffcrj< 1)/限定一个缓冲区只能存放-个资源+buffcrj ;模拟 4 :.产资源cout«"生产一个资源,放入缓冲区"vvjvv忡"«endl; lock|j=false;/ 解锁break;/一次生产一个if(j=3)cout«n找不到空缓冲区,等待中。”vvendl; sleep(2000);)i)return 0;2、消费者消费进程函数dword winapi customcr(lpvoid lpparamctcr)while(true)(for(inl n=0;nv4;
6、n+)if(buffern= 1)找到满缓冲区if(lockn=false)/同步锁为false,可以进行操作locknfue;/加锁,防止其他线程操作此缓冲区 if(buffern>=l)-buffern;/模拟消费资源cout«"消费一个资源,从缓冲区"vvnvv”中取出”vvendl; lockn=false;/ 解锁 break;/次生产一个1iif(n=3)(cout«"找不到满缓冲区,等待中。“vvendl;sleep(2000);)1)3、主函数,创建5个进程,英屮3个生产者进程,2个消费者进程int main(int ar
7、gc,char* argv)handle handle;dword dwl,dw2,dw3,dw4,dw5;/创建 5 个进程handle0=createthread(null,o.producer,null,0,&dw 1);handlc l=crcatcthrcad(null,0.produccr,null,0,&dw2);handle =createthread(null,o,producer,null,0,&dw3);handle3=createthread(null,0,customer,null,0,&dw4);五、运行结果3个牛产者2个消费者,共享
8、4个缓冲区,运行结果如下:c *c: progra> fileslicrosoft visual studiomyprojects多线程debug多线 日回口岀 岀出 岀岀岀岀 f-h-取口口口 取取取取取 0 1p 3 2 0 o ono0 2 1nnnn o 区区时区区区。黑区区区评注沖识 绸区区区区区区区$话区区冲ti k入熒入入人入入入入< c 区区区区y 源嘛嘛嘛嘛源嘛嘛嘛嘛嘛嘛嘛嘛嘛嘛嘛嘛ke 不个个个个个空空个个个个个个个个个+懑陋个个个个个an 一一二一一劇一一二一一二一劇二一二 s 产产费产产产不不费费产产产费费费费不不产产费费产es 至生 消生生生我找生生生 找
9、找生生生ipy出出 m-取第 0 0 3nn0e 。区区誥区nll1、一个生产者生产,一个消费者消费:2、两个生产者连续生产,两个消费者连续消费:出出 口 口k2刼。-h-h-o 0 0 2 区区 isss 人入等aim缓:= ,,区区, 一个个空空个个 一 一 1- 一 产产7-7-b 注生3、多个生产者于多个消费者进行生产消费操作:附:出 出出 出出出+取取取取阿 0 1p 3 2 0 o otjn 0 2 in n n n 区区呻区区区:时注区区区 第区区区srsa因区氐改 入入缓入入入入入353® 区区 ©个个个个个个个个个个个个金 一二一二劇一二二一一一 产产费产
10、产产不不费费产产产费费费需 注注消笠生生注注#include hiostream.hm#include hwindows.hn#include ustdio.hh bool lock4= false,false,false,false;四把锁,分别对四个缓冲区进行同步int buffer4=0,0a0;/缓冲区,表示资源的个数void display()cout«,rn«endl;cout«h 缓冲区 0123h«endl;for(int i=0;i<4;i+)cout«m h«bufferfi«n “; cout
11、171;endl;dword winapi producer(lpvoid lpparameter)while(true)for(intj=0;j<4;j+)if(bufferj=o)/ 找到空缓冲区if(lockj=false)/同步锁为false,可以进行操作 lockj=true;/加锁,防止其他线程操作此缓冲区 if(bufferj<l)/限定一个缓冲区只能存放一个资源 +bufferj;模拟生产资源 cout«n生产一个资源,放入缓冲区”v<j«”中°«endl; lockj=false;/ 解锁 break;/ 一次生产一个
12、if(j=3)com*我不到空缓冲区,等待中oo h«endl;sleep(2ooo);1return 0;dword winapi customer(lpvoid ipparameter)while(true)for(int n=0;n<4;n+) if(buffern= 1) 找到满缓冲区if(lockn=false)/同步锁为false,可以进行操作 lockn=true;/加锁,防止其他线程操作此缓冲区 if(buffern>=l)buffern;模拟消费资源cout«°消费一个资源,从缓冲区”vvnvv“中取出”vvendl; lockn=false;/ 解锁break;/ 一次生产一个if(n=3)cout«m找不到满缓冲区,等待中。m«endl; sleep(2000);1return 0;int main(int argc,char* argv)display();handle handle3;dword dwl,dw2,dw3,dw4,dw0;handleo=createthread(null,o,producer,null,0,&dw 1); handle l=createthread(null,0,producer,null,0,&dw2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.3金属的腐蚀与防护(同步课件)-第二辑:苏教版2019选择性必修1高二化学课件+练习 特供省重点 2021-2022学年高中化学苏教版(2019)选择性必修一课件+练习
- 广东轻工职业技术学院《中医临证施护》2023-2024学年第一学期期末试卷
- 广东培正学院《Java海量数据分布式开发》2023-2024学年第一学期期末试卷
- 广东农工商职业技术学院《嵌入式系统与开发》2023-2024学年第一学期期末试卷
- 一年级数学计算题专项练习汇编
- 【原创】江苏省宿迁市2013-2020学年高一语文(苏教版)第二学期期中综合试题
- 广播电视概论(河海大学)学习通测试及答案
- 销售员个人总结
- 《创新大课堂》2021高考生物(人教版)大一轮总复习课时作业-第九单元-生物与环境-群落的结构和演替
- 《睾丸炎的护理》课件
- 公立医院章程范本(中国医院协会2019版)
- 江苏小高考(物理化学生物)真题及答案
- 垃圾开挖清运方案
- 如何分析睡眠监测呼吸信号及监测结果解读
- 2023年普通高等学校招生“圆梦杯”统一模拟考试数学试题+含答案
- 急性心衰抢救流程
- GB/T 8753.2-2005铝及铝合金阳极氧化氧化膜封孔质量的评定方法第2部分:硝酸预浸的磷铬酸法
- GB/T 3280-2015不锈钢冷轧钢板和钢带
- 工程伦理分析-切尔诺贝利
- 外墙用水泥纤维板接缝位置开裂问题及处理
- 超星尔雅学习通【中国近现代史纲要(首都师范大学)】章节测试含答案
评论
0/150
提交评论