下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 计算机软件基础(太原科技大学)实验五

计算机软件基础(太原科技大学)实验五.doc

计算机软件基础(太原科技大学)实验五

有一种爱叫放肆选择
2019-02-17 0人阅读 举报 0 0 暂无简介

简介:本文档为《计算机软件基础(太原科技大学)实验五doc》,可适用于IT/计算机领域

《软件开发技术基础》实验报告学院:电子信息工程学院 班级:  电子  学号:    姓名:       实验五Windows操作系统并发多线程的应用(学时)班级 电子 学号 姓名许鹏      第周 星期五第、节 成绩      实验类型:验证性实验要求:必修实验学时:学时一、实验目的:加深对Windows线程概念及线程同步管理各部门内容的理解熟悉Windows线程管理API的使用。二、实验要求:、通过上网查阅资料了解Windows线程同步函数写出常用的API函数的定义、阅读案例程序给出程序的详细注解、运行程序分析程序结果、改写程序实现要求见(四)。三、实验内容:以下程序实现多线程同步其关系如下:父亲、儿子、女儿三人和一个盘子当盘子空时父亲往盘中随机放苹果或香蕉儿子只从盘中拿桔子女儿只从盘中拿苹果。四、要求:)改写程序要求为:母亲往盘中随机放苹果或桔子儿子只从盘中拿苹果女儿只从盘中拿桔子)写出完整的程序并能调试通过即可五、实验原理:调用WinAPI中的CreateThread函数创建线程。CreateThread(,,TEventWindow::ThreadFunc,this,,hThreadId)第一个参数设定线程的安全属性因其仅用于WindowsNT故不设定。第二个参数为指定线程使用缺省的堆栈大小。第三个参数指定线程函数线程即从该函数的入口处开始运行函数返回时就意味着线程终止运行。第四个参数为线程函数的参数可以是指向任意数据类型的指针。第五个参数设定线程的生成标志。hThreadId存放线程的标识号。线程函数如下定义上述的this参数是指向线程所属窗口的句柄指针通过thrdWin参数传送过来利用这个指针再调用相应的LoopFunc函数线程的具体事务都在这个函数中执行。WaitForSingleObject(hThread,)windows里面的线程同步的api就是让你这个线程或者说程序停在那里等别的程序通知你或者说发一个信号量等然后这个程序在继续运行下去。CloseHandle函数为关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle且内核对象的计数加CloseHandle之后引用计数减当变为时系统删除内核对象。ReleaseSemaphore函数用于对指定的信号量增加指定的值sleep函数可计算执行挂起的时间rand函数在产生随机数srand(time())可以为rand函数提供不同的种子值进而产生不同的随机数序列。六、程序代码:()苹果香蕉问题:#include<iostream>usingnamespacestd#include<windowsh>#include<timeh>intkHANDLEAppleCRITICALSECTIONmmutexHANDLEBananaDWORDWINAPISon(LPVOIDn){HANDLEAppleCRITICALSECTIONmmutexinti=::OpenSemaphore(MUTEXALLACCESS,false,"Apple")while(){::WaitForSingleObject(Apple,INFINITE)等苹果cout<<"Soneats"<<i<<"apples"<<endlLeaveCriticalSection(mmutex)i}::CloseHandle(Apple)return}DWORDWINAPIDaughter(LPVOIDn){inti=HANDLEBananaCRITICALSECTIONmmutexOpenSemaphore(MUTEXALLACCESS,false,"Banana")while(){::WaitForSingleObject(Banana,INFINITE)等香蕉cout<<"Daughtereats"<<i<<"bananas"<<endlLeaveCriticalSection(mmutex)i}::CloseHandle(Banana)return}DWORDWINAPIFather(LPVOIDn){UINTfruitCRITICALSECTIONmmutexEnterCriticalSection(mmutex)srand(GetTickCount())fruit=rand()if(fruit==){盘中放入苹果cout<<k<<"fatherproduceanapple"<<endlk=k::ReleaseSemaphore(Apple,,)}else{盘中放香蕉cout<<k<<"fatherproduceabanana"<<endlk=k::ReleaseSemaphore(Banana,,)}return}intmain(){intjk=HANDLEFatherApple=::CreateSemaphore(,,,"apple")Banana=::CreateSemaphore(,,,"banana")InitializeCriticalSection(mmutex)for(j=j<j){Fatherj=::CreateThread(,,Father,,,)}::CreateThread(,,Son,,,)::CreateThread(,,Daughter,,,)Sleep()WaitForMultipleObjects(,Father,TRUE,INFINITE)return}()苹果桔子问题:#include<iostream>usingnamespacestd#include<windowsh>#include<timeh>intkHANDLEAppleHANDLEOrangeCRITICALSECTIONmmutexDWORDWINAPISon(LPVOIDn){HANDLEOrangeCRITICALSECTIONmmutexinti=OpenSemaphore(MUTEXALLACCESS,false,"Orange")while(){::WaitForSingleObject(Orange,INFINITE)等桔子cout<<"Soneats"<<i<<"oranges"<<endlLeaveCriticalSection(mmutex)i}::CloseHandle(Apple)return}DWORDWINAPIDaughter(LPVOIDn){inti=HANDLEAppleCRITICALSECTIONmmutexOpenSemaphore(MUTEXALLACCESS,false,"Apple")while(){::WaitForSingleObject(Apple,INFINITE)等苹果cout<<"Daughtereats"<<i<<"apples"<<endlLeaveCriticalSection(mmutex)i}::CloseHandle(Apple)return}DWORDWINAPIMather(LPVOIDn){UINTfruitCRITICALSECTIONmmutexEnterCriticalSection(mmutex)srand(GetTickCount())fruit=rand()if(fruit==){盘中放入苹果cout<<k<<"matherproduceanapple"<<endlk=k::ReleaseSemaphore(Apple,,)}else{盘中放入桔子cout<<k<<"matherproduceanorange"<<endlk=k::ReleaseSemaphore(Orange,,)}return}intmain(){intjk=HANDLEMatherApple=::CreateSemaphore(,,,"apple")Orange=::CreateSemaphore(,,,"orange")InitializeCriticalSection(mmutex)for(j=j<j){Matherj=::CreateThread(,,Mather,,,)}::CreateThread(,,Son,,,)::CreateThread(,,Daughter,,,)Sleep()WaitForMultipleObjects(,Mather,TRUE,INFINITE)return}七、实验结果

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/12

计算机软件基础(太原科技大学)实验五

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利