全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 生产者消费者问题一、 实验目的1 掌握进程(线程)的同步与互斥。2 掌握生产者消费者问题的实现方法。3 掌握多线程编程方法。二、 相关函数VC提供一系列函数用于实现多线程编程以及线程的互斥与同步。(1) 创建线程HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄,其中各参数说明如下: lpThreadAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了线程的安全属性,一般置为 NULL; dwStackSize:指定了线程的堆栈深度,一般都设置为0; lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。main()函数是主线程的入口函数,同样,新创建的线程也需要一个入口函数,lpStartAddress就是指示该函数的地址。并且这个函数的定义应遵循下面的声明形式 DWORD WINAPI ThreadProc(LPVOID lpParameter); lpParameter:指定了线程执行时传送给线程的32位参数,即线程函数的参数; dwCreationFlags:控制线程创建的附加标志,可以取两种值。如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于阻塞状态,并不马上执行,直至函数ResumeThread被调用; lpThreadId:该参数返回所创建线程的ID; 函数返回值:如果创建成功则返回线程的句柄,否则返回NULL。(2) 创建互斥对象(用于互斥)HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName);该函数可以创建一个命名的或匿名的互斥对象,其中各参数说明如下: lpMutexAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了互斥对象的安全属性,一般置为NULL; bInitialOwner:指定互斥对象的初始拥有者。如果设置为TRUE,则创建这个互斥对象的线程获得该对象的拥有权;否则,该线程将不获得互斥对象的拥有权。一般都设置为FALSE; lpName:指定互斥对象的名称。若设置为NULL,则创建匿名的互斥对象。 函数返回值:如果创建成功则返回互斥对象的句柄,否则返回NULL。(3) 创建信号量对象(用于同步)HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTES lpsaAttributes, LONG lInitialCount, LONG lMaxCount, LPCTSTR lpName);该函数可以创建一个命名的或匿名的信号量对象,其中各参数说明如下: lpsaAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了信号量对象的安全属性,一般置为 NULL; lInitialCount:信号量对象的初始计数值; lMaxCount:信号量对象计数值的最大值。 lpName:指定信号量对象的名称。若设置为NULL,则创建匿名的信号量对象。 函数返回值:如果创建成功则返回信号量对象的句柄,否则返回NULL。(4) 等待信号(相当wait操作)DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);该函数用来检测 hHandle 事件的信号状态,调用该函数后,该函数会一直等待,直到以下两种情况才会返回。、对象有信号,、等待时间已过。其中各参数说明如下: hHandle:所检测对象的句柄; dwMilliseconds:等待的时间。可以设置为INFINITE,则函数会一直等待,直到等待对象有信号才返回; (5) 释放互斥对象(相当用于互斥的signal操作)BOOL ReleaseMutex(HANDLE hMutex);该函数用来释放hMutex指定的互斥对象。其中各参数说明如下: hMutex:互斥对象的句柄; (6) 增加信号量的值(相当于用于同步的signal操作)BOOL ReleaseSemaphore ( HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);该函数用来增加信号量的值。其中各参数说明如下: hSemaphore:信号量对象的句柄; lReleaseCount 增加的计数,一般是1; lpPreviousCount增加前的数值返回,一般为NULL;三、 实验内容1、通过小程序thread_example(见附件)掌握在VC6.0环境下创建多线程的方法2、实现生产者消费者问题。(1)假设循环缓冲队列共有10个缓冲单元。(2)生产者线程的工作:生产出一个产品(即产生一个产品编号),按顺序往缓冲队列中“空”的缓冲单元放产品,并将该缓冲
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026年)护理安全管理、护理核心制度试卷有答案文档
- (2026年)度企业人力资源部工作总结
- 2025年河南省郏县数学三下期中综合测试模拟试题(含答案解析)
- 2025年河南省开封市顺河区四年级数学下学期期末联考试题含答案
- 2025年河南省三门峡市渑池县三年级数学下学期期末学业质量监测模拟试题(含答案)
- 2025年河北省邢台市桥西区三年级数学第二学期期末教学质量检测试题含答案解析
- 髋关节置换术后护理新进展
- 运用PDCA循环降低精神科住院患者约束使用率品管圈汇报
- 医疗器械MDR等同性论证完全指南:临床数据借用条件与合规路径解析
- 2025年河北省廊坊市安次区数学四下期末联考试题(含答案)
- 新苏教版一年级数学上册《搭搭拼拼》课件
- 2025年湖北省福利彩票发行中心招聘考试试卷真题
- 申万宏源深度受益于行业生态优化关注财富、科创、海外三大关键业务经营拓展
- AQ3026-2026《化工企业设备检修作业安全规范》标准解读课件
- 电路分析基础:第八章 阻抗与导纳
- 企业清产核资工作底稿模板-会计师事务所
- 校园环境卫生检查及记录表
- 实验室产品测试标准流程
- (人教部编版)二年级上册语文课课练(全册)含答案
- 学校安全管理ppt
- 蛙式开放式全数字视频管理平台技术说明书
评论
0/150
提交评论