《操作系统实验线程的互斥2》由会员分享,可在线阅读,更多相关《操作系统实验线程的互斥2(7页珍藏版)》请在金锄头文库上搜索。
1、1 线程的互斥姓名:蒙吉学号:20072411603 实验名称:线程的互斥实验目的:1)熟练掌握Windows 系统环境下线程的创建于撤销。2)熟悉 Windows 系统提供的线程互斥API。3)使用 Windows 系统提供的线程互斥API 解决实际问题。实验准备知识:临界区对象(Criticalsection)包括初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退 出 临 界 区LeaveCriticalSection()及 删 除 临 界 区DeleteCriticalsection 等 API 函数;互斥对象(
2、Mutex)包括创建互斥对象(CreateMutex()、打开互斥对象(OpenMutex()、释放互斥条件(ReleaseMutex()API 函数。实验内容:完成两个子线程之间的互斥,在主线程中使用系统调用CreateThread()创建两个子线程,并使两个子线程互斥的使用全局变量count。实验要求:能正确使用临界区对象,包括初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退出临界区LeaveCriticalSection()及删除临界区DeleteCriticalsection(),进一步理解线程的互斥。源代码
3、:/操作系统实验三.cpp:Defines the entry point for the console application./#include stdafx.h#include 操作系统实验三.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE static char THIS_FILE=_FILE_;#endif/The one and only application object CWinApp theApp;using namespace std;static int count=5;static HANDLE h1;stat
4、ic HANDLE h2;LPCRITICAL_SECTION hCriticalSection;/定义指向临界区对象的地址指针CRITICAL_SECTION Critical;/定义临界区名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -2 void func1();void func2();int _tmain(int argc,TCHAR*argv,TCHAR*envp)int nRetCode=0;DWORD dwThreadID1,dwThreadID2;hCriticalSection=&Critical;/将指向临界区的对象的指针指向临界区Initiali
5、zeCriticalSection(hCriticalSection);/初始化临界区h1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func1,(LPVOID)NULL,0,&dwThreadID1);/创建线程func1 if(h1=NULL)printf(Thread1 create Fail!n);else printf(Thread1 create success!n);h2=CreateThread(LPSECURITY_A TTRIBUTES)NULL,0,(LPTHREAD_START_R
6、OUTINE)func2,(LPVOID)NULL,0,&dwThreadID2);/创建线程func2 if(h1=NULL)printf(Thread2 create Fail!n);else printf(Thread2 create success!n);_sleep(1000);CloseHandle(h1);CloseHandle(h2);DeleteCriticalSection(hCriticalSection);/删除临界区ExitThread(0);return nRetCode;void func2()int r2;EnterCriticalSection(hCritic
7、alSection);/进入临界区r2=count;_sleep(100);r2=r2+1;count=r2;printf(count in func2=%dn,count);LeaveCriticalSection(hCriticalSection);/退出临界区名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -3 void func1()int r1;EnterCriticalSection(hCriticalSection);/进入临界区r1=count;_sleep(100);r1=r1+1;count=r1;printf(count in func1=%dn,c
8、ount);LeaveCriticalSection(hCriticalSection);/退出临界区 实验步骤:1)实验的第一步和线程的创建与撤销、线程的同步过程是一样的,比如新建工程文件以及工程设置等,2)引进系统分配的程序后对此程序进行修改输入源代码的过程名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -4 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -5 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -6 3)运行源代码或线程互斥的程序4)编译源代码过程名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -7 5)查看运行结果实验总结:1)进一步巩固和掌握第一二次实验线程的创建于撤销和线程的同步的一些基本函数的运用方法和各自的功能的基础上上了解线程的互斥。2)对初始化临界区InitializecritiCalSection()、进入临界区EnterCriticalSection()、退出临界区LeaveCriticalSection()及删除临界区DeleteCriticalsection()等命令的使用方法以及他们各自的功能有所了解。3)对线程互斥的源代码有所了解,比如进入临界区和退出临界区等。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -