最新计算机软件基础(太原科技大学)实验五_第1页
最新计算机软件基础(太原科技大学)实验五_第2页
最新计算机软件基础(太原科技大学)实验五_第3页
最新计算机软件基础(太原科技大学)实验五_第4页
最新计算机软件基础(太原科技大学)实验五_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档软件开发技术基础实验报告学院:电子信息工程学院_班级:电子131502_学号:姓名:精品文档精品文档实验五windows操作系统并发多线程的应用(2学时)班级电子131502学号201315020232姓名许鹏第15周星期五第3、4节成绩_实验类型:验证性实验要求:必修实验学时:2学时一、实验目的:加深对windows线程概念及线程同步管理各部门内容的理解;熟悉windows线程管理api的使用。二、实验要求:1、通过上网查阅资料,了解windows线程同步函数,写出常用的api函数的定义;2、阅读案例程序,给出程序的详细注解;3、运行程序,分析程序结果;4、改写程序实现要求见(四)。

2、三、实验内容:以下程序实现多线程同步,其关系如下:父亲、儿子、女儿三人和一个盘子,当盘子空时,父亲往盘中随机放苹果或香蕉,儿子只从盘中拿桔子,女儿只从盘中拿苹果。四、要求:1)改写程序,要求为:母亲往盘中随机放苹果或桔子,儿子只从盘中拿苹果,女儿只从盘中拿桔子2)写出完整的程序并能调试通过即可五、实验原理:调用win32api中的createthread函数创建线程。createthread(null,0,&teventwindow:threadfunc,this,0,&hthreadid);第一个参数设定线程的安全属性,因其仅用于windowsnt,故不设定。第二个参数为0指定线程使用缺省的

3、堆栈大小。第三个参数指定线程函数,线程即从该函数的入口处开始运行,函数返回时就意味着线程终止运行。第四个参数为线程函数的参数,可以是指向任意数据类型的指针。第五个参数设定线程的生成标志。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)苹果香蕉问题:#includeusingnamespacestd;#

5、include#includeintk;handleapple_;critical_sectionmmutex;handlebanana_;dwordwinapison(lpvoidn)/handleapple_;critical_sectionmmutex;inti=1;/:opensemaphore(mutex_all_access,false,apple_);while(1):waitforsingleobject(apple_,infinite);/等苹果coutsoneatsiapplesendl;leavecriticalsection(&mmutex);i+;:closehand

6、le(apple_);return0;dwordwinapidaughter(lpvoidn)inti=1;/handlebanana_;critical_sectionmmutex;/opensemaphore(mutex_all_access,false,banana_);while(1):waitforsingleobject(banana_,infinite);/等香蕉coutdaughtereatsibananasendl;精品文档精品文档leavecriticalsection(&mmutex);i+;:closehandle(banana_);return0;dwordwinap

7、ifather(lpvoidn)uintfruit;/critical_sectionmmutex;entercriticalsection(&mmutex);srand(gettickcount();fruit=rand()%2;if(fruit=0)/盘中放入苹果coutk+1fatherproduceanappleendl;k=k+1;:releasesemaphore(apple_,1,null);else/盘中放香蕉coutk+1fatherproduceabananaendl;k=k+1;:releasesemaphore(banana_,1,null);return0;intma

8、in()intj;k=0;handlefather_20;apple_=:createsemaphore(null,0,1,apple);banana_=:createsemaphore(null,0,1,banana);initializecriticalsection(&mmutex);for(j=0;j20;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);精品文档精

9、品文档waitformultipleobjects(20,father_,true,infinite);return0;(2)苹果桔子问题:#includeusingnamespacestd;#include#includeintk;handleapple_;handleorange_;critical_sectionmmutex;dwordwinapison(lpvoidn)/handleorange_;critical_sectionmmutex;inti=1;opensemaphore(mutex_all_access,false,orange_);while(1):waitforsin

10、gleobject(orange_,infinite);/等桔子coutsoneatsiorangesendl;leavecriticalsection(&mmutex);i+;:closehandle(apple_);return0;dwordwinapidaughter(lpvoidn)inti=1;/handleapple_;critical_sectionmmutex;opensemaphore(mutex_all_access,false,apple_);while(1):waitforsingleobject(apple_,infinite);/等苹果coutdaughtereat

11、siapplesendl;leavecriticalsection(&mmutex);i+;:closehandle(apple_);return0;dwordwinapimather(lpvoidn)精品文档精品文档uintfruit;/critical_sectionmmutex;entercriticalsection(&mmutex);srand(gettickcount();fruit=rand()%2;if(fruit=0)/盘中放入苹果coutk+1matherproduceanappleendl;k=k+1;:releasesemaphore(apple_,1,null);else/盘中放入桔子coutk+1matherproduceanorangeendl;k=k+1;:releasesemaphore(orange_,1,null);return0;intmain()intj;k=0;handlemather_20;apple_=:createsemaphore(null,0,1,apple);orange_=:createsemaphore(null,0,1,orange);initializecriticalsection(&mmutex);for(j=0;j20;j+)mather_j=:createthread(null,0,mather

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论