版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品文档软件开发技术基础实验报告学院:电子信息工程学院班级: 电子131502学号:姓名:实验五Windows操作系统并发多线程的应用(2学时)班级 电子131502 学 号201315020232 姓 名 许鹏第15周星期五第3、4节成绩实验类型:验证性实验要求:必修实验学时:2学时一、实验目的:加深对Windows线程概念及线程同步管理各部门内容的理解;熟悉 Windows线程管理API的使用。二、实验要求:1、通过上网查阅资料,了解 Windows线程同步函数,写出常用的 API函 数的定义;2、阅读案例程序,给出程序的详细注解;3、运行程序,分析程序结果;4、改写程序实现要求见(四)。
2、三、实验内容:以下程序实现多线程同步,其关系如下:父亲、儿子、女儿三人和一 个盘子,当盘子空时,父亲往盘中随机放苹果或香蕉,儿子只从盘中拿 桔子,女儿只从盘中拿苹果。四、要求:1 )改写程序,要求为:母亲往盘中随机放苹果或桔子,儿子只从盘中拿苹 果,女儿只从盘中拿桔子2)写出完整的程序并能调试通过即可五、实验原理:调用 Win32 API 中的 CreateThread 函数创建线程 CreateThread(NULL,O, &TEve ntWin dow:ThreadFu nc,this,O,&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(NUL
5、L) ,可以为 rand 函数提供不同的种子值,进而产生不同的随机数序列。六、 程序代码: (1)苹果香蕉问题:#include<iostream> 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(M
6、UTEX_ALL_ACCESS,false,"Apple_"); while(1):WaitForSingleObject(Apple_,INFINITE); / 等苹果 cout<<"Son eats"<<i<<"apples"<<endl;LeaveCriticalSection(&mmutex);i+;:CloseHandle(Apple_);return 0;DWORD WINAPI Daughter(LPVOID n)int i=1;/HANDLE Banana_;CR
7、ITICAL_SECTION mmutex; /OpenSemaphore(MUTEX_ALL_ACCESS,false,"Banana_"); while(1):WaitForSingleObject(Banana_,INFINITE); / 等香蕉 cout<<"Daughter eats"<<i<<"bananas"<<endl;精品文档精品文档LeaveCriticalSection(&mmutex);i+;:CloseHandle(Banana_); return 0;
8、DWORD WINAPI Father(LPVOID n)UINT fruit;/CRITICAL_SECTION mmutex; EnterCriticalSection(&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&l
9、t;<"father produce a banana"<<endl; k=k+1;:ReleaseSemaphore(Banana_,1,NULL);return 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
10、<20;j+) Father_j=:CreateThread(NULL,0,Father,NULL,0,0);:CreateThread(NULL,0,Son,NULL,0,0); :CreateThread(NULL,0,Daughter,NULL,0,0); Sleep(1000);精品文档精品文档WaitForMultipleObjects(20,Father_,TRUE,INFINITE); return 0;(2)苹果桔子问题:#include <iostream>using namespace std;#include <windows.h>#incl
11、ude <time.h>int k;HANDLE Apple_;HANDLE Orange_;CRITICAL_SECTION mmutex;DWORD WINAPI Son(LPVOID n)/HANDLE Orange_;CRITICAL_SECTION mmutex;int i = 1;OpenSemaphore(MUTEX_ALL_ACCESS,false,"Orange_"); while (1):WaitForSingleObject(Orange_,INFINITE); / 等桔子 cout<<"Son eats "
12、<<i<<" oranges"<<endl;LeaveCriticalSection(&mmutex);i+;:CloseHandle(Apple_);return 0;DWORD WINAPI Daughter(LPVOID n)int i = 1;/HANDLE Apple_;CRITICAL_SECTION mmutex;OpenSemaphore(MUTEX_ALL_ACCESS,false,"Apple_"); while (1):WaitForSingleObject(Apple_,INFINITE
13、); / 等苹果 cout<<"Daughter eats "<<i<<" apples"<<endl; LeaveCriticalSection(&mmutex);i+;:CloseHandle(Apple_);return 0;DWORD WINAPI Mather(LPVOID n)UINT fruit;/CRITICAL_SECTION mmutex;EnterCriticalSection(&mmutex); srand(GetTickCount();fruit = rand()%
14、2;if (fruit = 0)/ 盘中放入苹果cout<<k+1<<" mather produce an apple"<<endl;k=k+1;:ReleaseSemaphore(Apple_,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 Ma
15、ther_20;Apple_ = :CreateSemaphore(NULL,0,1,"apple");Orange_ =:CreateSemaphore(NULL,0,1,"orange");InitializeCriticalSection(&mmutex);for (j= 0 ; j < 20; j+)Mather_j=:CreateThread(NULL,0,Mather,NULL,0,0);:CreateThread(NULL,0,Son,NULL,0,0); :CreateThread(NULL,0,Daughter,NULL,
16、0,0); Sleep(1000);WaitForMultipleObjects(20,Mather_,TRUE,INFINITE);return 0;精品文档七、实验结果C :W in c ows?y?re n 2cmd ere FJLfather pi*oduce an Son eats 1 apples2 Fat hepiwdiice an S on coit:3 2 app 1gs JfatiiBF produce an Son eats 3 apples 4fcitheiH prortuce an S un eats 4 apples 、father pro duee Daughte
17、r eats 1 6Fa-tliair* produce Daugflitiei? eaLts 2 7father produce Daufrhter eats 3 S>F承tk曰f prodiiiice Dmjiijfhter 匚ett 狂 4 father produce Biavmhter IBFatheF >au!yhLc:r Ilfather Son eats 12Fath«F Sun tfAls lSFathep Son eats ld£ at hr Sun普也豁 15father Son eats 16f at hoiB Sun出出i挡 IVfather £nn eats 1 Of ahei* Sun廿鮎 i?father £on eats 2QF aihei:* Son eats 清拎任鳶逹斤绅.appleapplea hanara bananas a banami 直 bananas a banana bananasa. lbaninA bcuicincis苹 banaria bananase我ts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市第十二中学南站学校面向24、25、26应届生招聘16人考试笔试参考题库附答案解析
- 《JBT9922.1-1999 中心孔磨床参数》(2026年)实施指南
- 《JBT9495.3-1999 光学晶体透过率测量方法》(2026年)实施指南
- 《JBT9162.28-1999 夹持杆尺寸》(2026年)实施指南
- 土木工程答辩总结范文
- 2025中国中医科学院广安门医院招聘合同制职工10人(护理岗位)笔试考试参考试题及答案解析
- 《JBT9147-1999 膜片联轴器》(2026年)实施指南
- 天然气管道技术员岗位实习报告
- 2025江苏苏州实验室人教管理与服务部管理人员招聘2人笔试考试参考试题及答案解析
- 2026湖南益阳市两型建设投资集团有限公司招聘笔试考试备考试题及答案解析
- 河南科技大学《模拟电子技术》2025年学年期末试卷及答案
- 睡眠呼吸暂停综合征护理措施
- 专用车辆采购方案投标文件(技术方案)
- 第21课《小圣施威降大圣》课件-2025-2026学年统编版语文七年级上册
- 摸鱼儿雁丘词课件教学
- 2025-2026学年高一化学上学期第三次月考卷【测试范围:1~3章】(人教版必修第一册)(考试版A4)
- 入殓师介绍课件
- 2019年深圳市公安局第四批公开招聘警务辅助人员考试公安素质测试真题
- 解读(2025年版)输卵管积水造影诊断中国专家共识
- 2025年实验室检验员实验室检验流程考核试题及答案解析
- 2025年执业医师(中医)资格考试真题及答案
评论
0/150
提交评论