版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 进程(线程)的同步与互斥、实验目的.掌握基本的同步与互斥算法,理解生产者消费者模型。.学习使用 Windows中基本的同步对象,掌握相关API的使用方法。. 了解Windows中多线程的并发执行机制,实现进程的同步与互斥。二、实验内容.实验内容以生产者/消费者模型为依据,在 Windows环境下创建一个控制台进程,在该进程中创 建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。.实验要求学习并理解生产者/消费者模型及其同步/互斥规则;学习了解 Windows同步对象及其特性;熟悉实验环境,掌握相关API的使用方法;设计程序,实现生产者/消费者进程(线程)的同步与互斥;三、相关
2、API的功能及使用我们利用 Windows SDK提供的API编程实现实验题目要求,而 VC中包含有 Windows SDK的所有工具和定义。要使用这些 API,需要包含堆这些函数进行说明的 SDK头文件一 一最常见的是Windows.h(特殊的API调用还需要包含其他头文件 )。下面给出的是本实验使用到的API的功能和使用方法简单介绍。CreateThread功能一一创建一个在调用进程的地址空间中执行的线程 格式HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_ST
3、ART_ROUTINE lpStartAddress, LPVOID lpParamiter,DWORD dwCreationFlags, Lpdword IpThread ); 参数说明lpThreadAttributes 指向一个 LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。 dwStackSize定义原始堆栈大小。lpStartAddress指向使用 LPTHRAED_START_ROUTINE 类型定义的函数。lpParamiter定义一个给进程传递参数的指针。dwCreationFlags定义控制线程创建的附加标志。lpThread保存线程标志符(32位)Cr
4、eateMutex功能创建一个命名或匿名的互斥量对象格式HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); 参数说明lpMutexAttributes必须取值 NULL。bInitialOwner指示当前线程是否马上拥有该互斥量(即马上加锁)。lpName互斥量名称。CreateSemaphore功能一一创建一个命名或匿名的信号量对象格式HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAtt
5、ributes,LONG lInitialCount,LONG lMaximumCount,LPCTSTR lpName );参数说明lpSemaphoreAttributes必须取值 NULL。lInitialCount信号量的初始值。该值大于等于0,但小于等于lMaximumCount指定的最大值。lMaximumCount信号量的最大值。lpName信号量名称。WaitForSingleObject功能一一使程序处于等待状态,直到信号量hHandle出现(即其值大于0)或超过规定的等待时间格式DWORD WaitForSingleObject(HANDLE hHandle, DWORD
6、dwMilliseconds); 参数说明hHandle信号量指针。dwMilliseconds等待的最长时间(INFINITE为无限等待)。ReleaseSemaphore功能一一对指定信号量加上一个指定大小的量。成功执行则返回非0值格式BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lppreviousCount );参数说明hSemaphore信号量指针。lReleaseCount信号量的增量。lppreviousCount保存信号量当前值。ReleaseMutex功能一一打开互斥锁,即把互斥量加 1。成
7、功调用则返回0格式BOOL ReleaseMutex(HANDLE hMutex);参数说明hMutex互斥量指针。四、示例程序/定义一个结构体用于存储线程的信息struct ThreadInfoint serial;/ 线程号char entity;/线程类别(生产者或消费者)double delay;等待时间double persist; / 操作时间;/生产者void Producer(void *p)定义变量用于存储当前线程的信息DWORD m_delay;DWORD m_persist;int m_serial;从参数中获得信息m_serial=(ThreadInfo*)(p)-se
8、rial;m_delay=(DWORD)(ThreadInfo*)(p)-delay *INTE_PER_SEC);m_persist=(DWORD)(ThreadInfo*)(p)-persist *INTE_PER_SEC);while( running )/P操作cout生产者线程m_serial请求生产.endl;WaitForSingleObject(g_hEmptySemaphore,INFINITE);cout生产者线程 m_serial 请求独占缓冲区.endl;WaitForSingleObject(g_hMutex,INFINITE);Sleep(m_delay); 延迟等
9、待生产一个产品cout生产者线程 m_serial 生产 +ProductID 号产品成功.” endl;cout生产者线程 m_serial 请求将产品 ProductID 投 入缓冲 区.endl;把新生产的产品放入缓冲区g_bufferin = ProductID;in = (in+1)%SIZE_OF_BUFFER;Sleep(m_persist); / 操作等待cout生产者线程m_serial 将产品 ProductID 投入缓冲区中成功.endl;输出缓冲区当前的状态cout*endln当前缓冲区情况如图(代表已有产品,口代表没有产品):endl;for (int i = 0;i
10、0 ) cout” ;else cout 口;coutnn*nserial ;m_delay=(DWORD)(ThreadInfo*)(p)-delay *INTE_PER_SEC);m_persist=(DWORD)(ThreadInfo*)(p)-persist *INTE_PER_SEC);while( running )/P操作cout消费者线程m_serial请求消费.endl;WaitForSingleObject(g_hFullSemaphore,INFINITE);cout消费者线程 m_serial 请求独占缓冲区.endl;WaitForSingleObject(g_hMu
11、tex,INFINITE);Sleep(m_delay); 延迟等待从缓冲区中取出一个产品cout消费者线程 m_serial 请求取出一个产品.endl;ConsumeID = g_bufferout;g_bufferout=0;out = (out+1)%SIZE_OF_BUFFER;,endl;产品.endl;cout消费者线程m_serial取出产品ConsumeID成功消耗一个产品cout消费者线程 m_serial 开始消费消费 ConsumeID.endl;Sleep(m_persist);cout消费者线程m_serial消费产品ConsumeID成功输出缓冲区当前的状态cou
12、t*endln当前缓冲区情况如图endl;for ( int i= 0;i0 )cout ;else cout ;coutnn*n击 戋戋戈 dJm-l-T- 者者君 待产产口舌吉王呈口舌王呈呈 H工工一士,十工J二T下 线线缆缆缆线线纨 杳者者者者者者者 年产 生生:1 1消 产产占电口罂盒 生生独独整道尸 iisw- 请清请请请取霜当前彘冲回情况如图:神区中成功系统模y焜束Pre耳用 eFiy key 七口 continiuiei.成翟 品1A 产16投 品 H 费61产工 肖工挈II口 a -n 匚口 $广善 将8 4- 4 4 K- n -.1- -,二 11 4 二?号F31q *
13、些钱与妙皿 者 费产产产- 霍生生a当口4 4y 4区区 :膏 产产国 生生融独 清清请清线鬻 者亳 看产六、实验结果分析1、记录生产者和消费者的同步执行过程线程号线程类别延迟时间操作时间操作请求缓冲区请求生产(消费)结果1P12请求生产请求独占(在2前)生产成功2P26请求生产请求独占未生产3C45请求消费无未消费4C56请求消费无未消费5C32无无未消费2、分析Producer函数和Consumer函数的功能,并画出对应的程序流程图。Producer函数:通过用变量提取保存提取当前资源信息,然后判断是否执行,接着发出生产 请求,请求通过后独占缓冲区资源,接着生产一个产品投入缓冲区,成功后释放所占缓冲区资 源,到此此函数执行完成。Consumer函数:也是通过用变量提取保存提取当前资源信息,然后判断是否执行,接着发出 消费请求,请求通过后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024大数据分析与商业决策支持合同
- 2024不锈钢来料加工合同
- 2024寺庙仿古建筑施工合同技术支持合同
- 2024年建筑外墙清洗维护合同
- 2024年度二手房出售交接事项及保修条款合同
- 2024年度设备租赁合同设备类型与租赁期限
- 2024光电子技术研发与合作合同
- 2024年度N95口罩生产线扩建贷款合同
- 2024年建筑工程经纪代理协议
- 2024年度企业品牌形象设计及VI手册整编服务合同
- 《婴幼儿行为观察、记录与评价》习题库 (项目三) 0 ~ 3 岁婴幼儿语言发展观察、记录与评价
- 英语漫谈胶东海洋文化知到章节答案智慧树2023年威海海洋职业学院
- 环保产品管理规范
- 幼儿园:我中奖了(实验版)
- 赵学慧-老年社会工作理论与实务-教案
- 《世界主要海峡》
- 住院医师规范化培训师资培训
- 中央企业商业秘密安全保护技术指引2015版
- 螺旋果蔬榨汁机的设计
- 《脊柱整脊方法》
- 会计与财务管理专业英语智慧树知到答案章节测试2023年哈尔滨商业大学
评论
0/150
提交评论