




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上软件开发技术基础实验报告学院: 电子信息工程学院_ 班级:电子_ 学号: 姓名: 实验五 Windows操作系统并发多线程的应用(2学时)班 级 电子 学 号 2 姓 名 许鹏 第 15 周 星 期 五 第 3 、4节 成 绩 _ 实验类型:验证性 实验要求:必修实验学时: 2学时一、实验目的:加深对Windows线程概念及线程同步管理各部门内容的理解;熟悉Windows线程管理API的使用。二、实验要求:1、通过上网查阅资料,了解Windows线程同步函数,写出常用的API函数的定义;2、阅读案例程序,给出程序的详细注解;3、运行程序,分析程序结果;4、改写程序实现
2、要求见(四)。三、实验内容:以下程序实现多线程同步,其关系如下:父亲、儿子、女儿三人和一个盘子,当盘子空时,父亲往盘中随机放苹果或香蕉,儿子只从盘中拿桔子,女儿只从盘中拿苹果。四、要求:1)改写程序,要求为:母亲往盘中随机放苹果或桔子,儿子只从盘中拿苹果,女儿只从盘中拿桔子2)写出完整的程序并能调试通过即可五、实验原理: 调用Win32 API中的CreateThread函数创建线程。CreateThread(NULL,0,&TEventWindow:ThreadFunc,this,0,&hThreadId);第一个参数设定线程的安全属性,因其仅用于Windows NT,故不设
3、定。第二个参数为0指定线程使用缺省的堆栈大小。第三个参数指定线程函数,线程即从该函数的入口处开始运行,函数返回时就意味着线程终止运行。第四个参数为线程函数的参数,可以是指向任意数据类型的指针。第五个参数设定线程的生成标志。hThreadId存放线程的标识号。线程函数如下定义,上述的 this参数是指向线程所属窗口的句柄指针,通过thrdWin参数传送过来,利用这个指针再调用相应的LoopFunc函数,线程的具体事务都在这个函数中执行。WaitForSingleObject(hThread, 2000) windows里面的线程同步的api 就是让你这个线程或者说程序停在那里,等别的程序通知你或
4、者说发一个信号量等,然后这个程序在继续运行下去。CloseHandle函数为关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。ReleaseSemaphore函数用于对指定的信号量增加指定的值;sleep函数可计算执行挂起的时间;rand函数在产生随机数srand(time(NULL),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。六、程序代码:(1)苹果香蕉问题:#include<i
5、ostream>using namespace std;#include<windows.h>#include<time.h>int k;HANDLE Apple_;CRITICAL_SECTION mmutex;HANDLE Banana_;DWORD WINAPI Son(LPVOID n)/HANDLE Apple_;CRITICAL_SECTION mmutex;int i=1;/:OpenSemaphore(MUTEX_ALL_ACCESS,false,"Apple_");while(1):WaitForSingleObject(Ap
6、ple_,INFINITE);/等苹果cout<<"Son eats"<<i<<"apples"<<endl;LeaveCriticalSection(&mmutex);i+;:CloseHandle(Apple_);return 0;DWORD WINAPI Daughter(LPVOID n)int i=1;/HANDLE Banana_;CRITICAL_SECTION mmutex;/OpenSemaphore(MUTEX_ALL_ACCESS,false,"Banana_&quo
7、t;);while(1) :WaitForSingleObject(Banana_,INFINITE);/等香蕉 cout<<"Daughter eats"<<i<<"bananas"<<endl; LeaveCriticalSection(&mmutex); i+;:CloseHandle(Banana_);return 0;DWORD WINAPI Father(LPVOID n)UINT fruit;/CRITICAL_SECTION mmutex;EnterCriticalSection(&
8、amp;mmutex);srand(GetTickCount();fruit=rand()%2;if(fruit=0)/盘中放入苹果cout<<k+1<<"father produce an apple"<<endl;k=k+1;:ReleaseSemaphore(Apple_,1,NULL);else/盘中放香蕉cout<<k+1<<"father produce a banana"<<endl;k=k+1;:ReleaseSemaphore(Banana_,1,NULL);ret
9、urn 0;int main()int j;k=0;HANDLE Father_20;Apple_=:CreateSemaphore(NULL,0,1,"apple");Banana_=:CreateSemaphore(NULL,0,1,"banana");InitializeCriticalSection(&mmutex);for(j=0;j<20;j+)Father_j=:CreateThread(NULL,0,Father,NULL,0,0);:CreateThread(NULL,0,Son,NULL,0,0);:CreateThre
10、ad(NULL,0,Daughter,NULL,0,0);Sleep(1000);WaitForMultipleObjects(20,Father_,TRUE,INFINITE);return 0;(2)苹果桔子问题:#include <iostream>using namespace std;#include <windows.h> #include <time.h>int k;HANDLE Apple_;HANDLE Orange_;CRITICAL_SECTION mmutex;DWORD WINAPI Son(LPVOID n)/HANDLE Ora
11、nge_;CRITICAL_SECTION mmutex;int i = 1;OpenSemaphore(MUTEX_ALL_ACCESS,false,"Orange_"); while (1):WaitForSingleObject(Orange_,INFINITE);/等桔子cout<<"Son eats "<<i<<" oranges"<<endl;LeaveCriticalSection(&mmutex);i+;:CloseHandle(Apple_);return 0;
12、DWORD WINAPI Daughter(LPVOID n)int i = 1;/HANDLE Apple_;CRITICAL_SECTION mmutex;OpenSemaphore(MUTEX_ALL_ACCESS,false,"Apple_");while (1):WaitForSingleObject(Apple_,INFINITE);/等苹果cout<<"Daughter eats "<<i<<" apples"<<endl;LeaveCriticalSection(&
13、;mmutex);i+;:CloseHandle(Apple_);return 0;DWORD WINAPI Mather(LPVOID n)UINT fruit;/CRITICAL_SECTION mmutex;EnterCriticalSection(&mmutex);srand(GetTickCount();fruit = rand()%2;if (fruit = 0)/盘中放入苹果cout<<k+1<<" mather produce an apple"<<endl;k=k+1; :ReleaseSemaphore(App
14、le_,1,NULL);else /盘中放入桔子cout<<k+1<<" mather produce an orange"<<endl;k=k+1; :ReleaseSemaphore(Orange_,1,NULL);return 0;int main()int j;k=0;HANDLE Mather_20; Apple_ = :CreateSemaphore(NULL,0,1,"apple");Orange_ =:CreateSemaphore(NULL,0,1,"orange");InitializeCriticalSection(&mmutex); for (j= 0 ; j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 焊接工艺参数优化考核试卷
- 紧固件螺纹设计深入考核试卷
- 管道工程绿色施工技术创新实践与发展动态考核试卷
- 滚动轴承在海洋工程中的应用考核试卷
- 纸机设备的状态监测与预测维护考核试卷
- 描写月亮的初三语文作文
- 开心为题初二语文作文
- 空调系统的故障树分析考核试卷
- 焙烤食品制造食品安全风险识别与控制考核试卷
- 批发业品牌故事与内容营销考核试卷
- (广东二模)2025年广东省高三高考模拟测试(二)语文试卷(含答案解析)
- 湖北省武汉市2025届高中毕业生四月调研考试历史试题及答案(武汉四调)
- 2025-2030中国类脑计算行业市场发展现状及建设案例与发展趋势研究报告
- 2025-2030中国磁悬浮发电机行业市场现状分析及竞争格局与投资发展研究报告
- 2024年四川宜宾环球集团有限公司招聘考试真题
- SL631水利水电工程单元工程施工质量验收标准第3部分:地基处理与基础工程
- 2025时政试题及答案(100题)
- DB11-T 765.4-2010 档案数字化规范 第4部分:照片档案数字化加工
- 华南理工大学自主招生个人陈述自荐信范文
- 输血常见不良反应及处理培训
- 2024年建筑业10项新技术
评论
0/150
提交评论