操作系统实验(七)线程的互斥

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1线程的互斥实验名称:线程的互斥实验目的:1)熟练掌握Windows系统环境下线程的创建于撤销。2)熟悉Windows系统提供的线程互斥API。3)使用Windows系统提供的线程互斥API解决实际问题。实验准备知识:临界区对象(Criticalsection)包括初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退出临界区LeaveCriticalSection()及删除临界区DeleteCriticalsection等API函数;互斥对象(Mutex)包括创建互斥对象(CreateMutex())、打开互斥对象(OpenMutex())、释放互斥条件(ReleaseMutex())API函数。实验内容:完成两个子线程之间的互斥,在主线程中使用系统调用CreateThread()创建两个子线程,并使两个子线程互斥的使用全局变量count。实验要求:能正确使用临界区对象,包括初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退出临界区LeaveCriticalSection()及删除临界区DeleteCriticalsection(),进一步理解线程的互斥。源代码://操作系统实验三.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#include操作系统实验三.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;staticintcount=5;staticHANDLEh1;staticHANDLEh2;LPCRITICAL_SECTIONhCriticalSection;//定义指向临界区对象的地址指针CRITICAL_SECTIONCritical;//定义临界区2voidfunc1();voidfunc2();int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;DWORDdwThreadID1,dwThreadID2;hCriticalSection=&Critical;//将指向临界区的对象的指针指向临界区InitializeCriticalSection(hCriticalSection);//初始化临界区h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func1,(LPVOID)NULL,0,&dwThreadID1);//创建线程func1if(h1==NULL)printf(Thread1createFail!\n);elseprintf(Thread1createsuccess!\n);h2=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func2,(LPVOID)NULL,0,&dwThreadID2);//创建线程func2if(h1==NULL)printf(Thread2createFail!\n);elseprintf(Thread2createsuccess!\n);_sleep(1000);CloseHandle(h1);CloseHandle(h2);DeleteCriticalSection(hCriticalSection);//删除临界区ExitThread(0);returnnRetCode;}voidfunc2(){intr2;EnterCriticalSection(hCriticalSection);//进入临界区r2=count;_sleep(100);r2=r2+1;count=r2;printf(countinfunc2=%d\n,count);LeaveCriticalSection(hCriticalSection);//退出临界区3}voidfunc1(){intr1;EnterCriticalSection(hCriticalSection);//进入临界区r1=count;_sleep(100);r1=r1+1;count=r1;printf(countinfunc1=%d\n,count);LeaveCriticalSection(hCriticalSection);//退出临界区}实验步骤:1)实验的第一步和线程的创建与撤销、线程的同步过程是一样的,比如新建工程文件以及工程设置等,2)引进系统分配的程序后对此程序进行修改输入源代码的过程4563)运行源代码或线程互斥的程序4)编译源代码过程75)查看运行结果实验总结:1)进一步巩固和掌握第一二次实验线程的创建于撤销和线程的同步的一些基本函数的运用方法和各自的功能的基础上上了解线程的互斥。2)对初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退出临界区LeaveCriticalSection()及删除临界区DeleteCriticalsection()等命令的使用方法以及他们各自的功能有所了解。3)对线程互斥的源代码有所了解,比如进入临界区和退出临界区等。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功