多线程--生产者消费者问题_第1页
多线程--生产者消费者问题_第2页
多线程--生产者消费者问题_第3页
多线程--生产者消费者问题_第4页
多线程--生产者消费者问题_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、相等效,只要缓冲池未满,生产者可将商品送入缓冲池;只要缓冲池未空, 消费者可从缓冲池取走一商品。功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放商品、取商品等过程。具体参数:有1个生产者进程;有1个消费者进程;缓冲区单元个数BUFFER_NUM =5;不同的生产进程可生产不同的产品,自己可任意定义,在本程序中是直接将相应生产者代号放入缓冲区,消 费时将某消费者消费某生产者的信息显示出来 实验结果:见截图小结从此次试验中,学到了很多关于编程的知识,以前对于编程的认识只停留在一些简单的算法上,并没有系统的 进行编程训练。此次的试验是以前从没接触过的多线程,中间涉及的同步

3、及互斥问题,在设计软件及系统时,都是 极其重要的。多线程实验对于我们现阶段确实有点偏难,不过,在经过请教同学及看参考书,终于自己写出了一个相对于简 单一点的生产者消费者的多线程程序。评定成绩:批阅教师:年 月 日一、问题概述一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从假定这些生产者和消费者互相等效,缓冲池取走一个消息。二、设计流程图(1)生产者流程图:(2)消费者流程图三、数据定义# define BUFFER_NUM 5 / 缓冲区个数int mutexBUFFER_NU

4、M=0,0,0,0,0;int bufferBUFFER_NUM=0,0,0,0,0;/ 初始化缓冲区为空HANDLE g_hMutex; /用于线程间的互斥void show();函数,显示生产者及消费者过程DWORD WINAPI Producer(LPVOID lpPara);过程,生产者生产产品过程DWORD WINAPI Customer(LPVOID lpPara);/ 过程,消费者消费产品过程四、源程序#include#include# define BUFFER_NUM 5 / 缓冲区个数int mutexBUFFER_NUM=0,0,0,0,0; 一int bufferBUF

5、FER_NUM=0,0,0,0,0;/初始化缓冲区为空HANDLE g_hMutex; /用于线程间的互斥 void show。for(int i=0;iBUFFER_NUM;i+)printf(第d 个缓冲区为:dn”,i,bufferi);printf(nn);DWORD WINAPI Producer(LPVOID lpPara)while(true)for(int i=0;iBUFFER_NUM;i+)if(bufferi=0)if(mutexi=0)mutexi=1;/加 锁WaitForSingleObject(g_hMutex,INFINITE);bufferi=1;printf

6、(生产出一个产品,已放入第d个缓冲区n,i);show();Sleep(1000);ReleaseMutex(g_hMutex);mutexi=0;/解锁break;if(i=BUFFER_NUM)printf(缓冲区已满,请等待/);/缓冲区已满,请等待Sleep(1000);DWORD WINAPI Customer(LPVOID lpPara)while(true)for(int j=0;jBUFFER_NUM;j+)if(bufferj=1)if(mutexj=0)mutexj=1;/加 锁WaitForSingleObject(g_hMutex,INFINITE);bufferj=0

7、;printf(”消费者已消费第d个缓冲区的产品n”,j);show();Sleep(1000);ReleaseMutex(g_hMutex);mutexj=0;/解锁break;if(j=BUFFER NUM)printf(-没有产品可消费,请等待/);/没有产品可消费,请等待 Sleep(1000);int main(int argc,char* argv)HANDLE handle4;g_hMutex = CreateMutex(NULL,FALSE,NULL);for(int i=0;i2;i+)handlei=CreateThread(NULL,0,Producer,NULL,0,N

8、ULL);for(i=2;i11 11 11 11 11个缓冲区的产品 0 0 I I I一翳为为为为为一窘区区区区区一 &.:.甲,甲中中中 嘉泻*纱个缓冲区的产品000II(3)空缓冲区,无产品消费个缓冲区的产品1&餐为为为为为 龈区区区区区 . .E!.甲.甲.甲.甲 -匚爰爰蓼备境 SB个缓冲区的产品3&3Bjl-.甘.甘.甘.甘. 区区区区区 密m.m.m.m.m. _|11 11 11 11 11 一匚爰爰爰爰爰 +-aua土au . -0 1A 2 T 4 逍密直广品可浦落 谭蜀括有产品苛常聂 请鹭4(4)缓冲区已满,等待己放入第2个缓冲区01111匚口 灯=.灯=.灯=.灯=.灯= qj区区区区区 占 口 口 口 口 %

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论