已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告生产者和消费者的问题一、实验目的1.了解主、基本生产者和消费者模型的基本同步和互斥算法。2.学习使用Windows 2000/XP上的基本同步对象,并了解如何使用相关API。3.了解Windows 2000/XP中多线程的并发执行机制、线程之间的同步和互斥。二、实验内容和要求1.实验内容基于生产者/消费者模型在Windows 2000环境中生成控制台进程,变更进程生成n个线程模拟生产者和消费者,实现进程(线程)的同步和互斥。2.实验要求学习和理解生产者/消费者模型及其同步/互斥规则了解Windows同步对象及其特性学习熟悉实验环境,掌握相关API的使用方法实现生产者/消费者流程(线程)同步和互斥的设计方案提交实验报告三、实验日程1.在进行实验之前,先了解图书馆或网络百度中有关生产者/消费者模式的知识,建立生产者/消费者模式的基本概念。2.使用13周、15周、17周的正常时间编写和调试程序代码。3.利用其他闲暇时间分析实验的最终结果,完成相关实验报告。四、实验环境1.硬件条件:一台普通计算机2.软件条件:操作系统:Windows 2000/XP开发语言:VC此实验在Windows 2000 VC6.0环境中实施,并利用Windows SDK提供的系统接口(API)完成程序的功能。VC是包含Windows SDK中所有工具和定义的集成开发环境,因此安装VC无需专门安装SDK。实验中使用的应用程序界面(API)是操作系统为应用程序设计提供的系统功能界面。要使用这些API,需要包含函数说明的SDK头文件。最常见的是windows.h。某些特殊API调用还必须包含其他头文件。五、正文1.程序映射:2.数据结构:(1)将缓冲区表示为整数数组Buffer_Critical。无论是制造产品还是对现有产品的消费,都需要访问结构调整缓冲区。(2)程序使用自定义结构ThreadInfo记录有关线程的信息。也就是说,测试用例文件中的一行信息被记录下来,程序用于使相应的生产者或消费者。由于创建多线程,因此程序使用一个ThreadInfo结构数组Thread_Info。(3)在实施本程序的消费者生产模型时,具体地通过以下同步对象进行互斥操作:设置互斥的h_mutex,以便生成器在查询和保留缓冲区中的下一个空位置时相互排斥。每个生产者通过设置h_SemaphoreMAX_THREAD_NUM信号量数组(表示该产品已制造)与消费者同步,使用一个信号量。此外,一个信号量empty_semaphore(表示空缓冲区数)执行类似的同步,以指示缓冲区中是否存在空位置,以便开始生产下一个产品。每个缓冲区使用同步对象在该缓冲区中互斥。这通过设置临界区域对象阵列PC_CriticalMAX_BUFFER_NUM实现。3.实验阶段:(1)打开VC,选择“文件-新建”菜单项,选择“项目”选项卡,然后创建名为R_WP1的win32控制台应用程序项目。创建项目时,必须指定创建项目的目录。(2)在项目中创建源文件R_WP1.cpp:菜单项Project-Add to project-Files。在文件名输入栏中,输入要生成的文件名。其中r _ wp1.cpp然后,当提示您创建新文件时,回答“是”。通过Workspace-Source Files打开文件。在此处编辑并保存源文件。(3)通过调用Build-Rebuild all菜单项进行编译连接,将debug-R_WP1.exe程序导入到指定的项目目录中,然后将指定的test.txt文件保存到debug目录中,用户可以从控制台进入debug目录并运行程序。创建数据文件时,由于与文件相关的格式问题,建议您在记事本中手动输入一个数据,而不是复制和粘贴数据。4.实验源代码:/* * * * * * * * * * * * * * * * * r _ wp1 . CPP * * * * * * * * * * * * * * * * * * * *#include#include#include#include#include/定义某些常数/此程序允许的最大临界区域数# definedmax _ buffer _ num10/秒到微秒的乘法因子#define INTE_PER_SEC 1000/此程序允许的生产和消耗线程总数# definedmax _ thread _ num 64/定义记录测试文件中指定的每个线程的参数的结构Struct ThreadInfoInt serialChar entityDouble delayinthread _ requestmax _ thread _ num;Int n _ requestcritical _ section PC _ criticalmax _ buffer _ num;int buffer _ criticalmax _ buffer _ num;handlh _ threadmax _ buffer _ num;threadinfo thread _ infomax _ thread _ num;HANDLE empty _ semaphoreHANDLE h _ mutexDWORD n _ Thread=0;DWORD n _ Buffer _ or _ Criticalhandlh _ semaphoremax _ thread _ num;void Produce(void * p);void consumer(void * p);bool IfInOtherRequest(int);int FindProducePosition();int findbuffer positon(int);Int main(void)DWORD wait _ for _ allIfstream inFilefor(int I=0);In _ Buffer _ or _ Criticalinfile . get();Printf(“输出文件为: n”);printf(“% d n”,(int)n _ buffer _ or _ critical);While (infile) & nbspInfilethread _ info n _ thread。串行;Infilethread _ info n _ thread。entityInfilethread _ info n _ thread。delaychar c;infile . get(c);While(c)!=n!infile . eof()InFileThread _ info n _ thread。thread _ requestthread _ infon _ thread。n _ request;infile . get(c);N _ Threadfor(j=0);j(int)n _ Thread;J) _Int temp _ serial=thread _ info j。串行;Char temp _ entity=thread _ info j。entitydouble temp _
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安踏面试流程解析
- 企业培训体系构建与培训课程开发
- 军休服务管理岗位面试准备与技巧
- 市场经理岗位能力中级工作计划及安排
- 物流产品销售市场调研与销售计划
- 事业单位面试热点解读
- 甲状腺危象术后时间及护理多方面知识测试试题附答案
- 高级宠物品种识别与基因分析技术
- 新手会计实操工作计划及全盘账务处理指南
- 宠物店高级店长准备技能与素质要求
- 2019养老护理员试题及答案
- 天津公务员考试试题答案2025年
- 2024-2025学年河南省濮阳市九年级(上)期中英语试卷
- 灭火器的使用方法
- 贵州省2023年普通高中学业水平合格性考试思想政治考题及答案
- (2024版)人教版数学三年级上册第二单元混合运算全套课件
- 2025中国腰椎间盘突出症诊疗指南
- 义务教育语文课程标准(2025年版)考试题库及答案
- 巡查工作流程课件
- 核心素养导向下高中语文大单元教学评价体系构建研究
- 电工日常应急安全培训课件
评论
0/150
提交评论