资源描述:
《操作系统实验5线程的同步.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《操作系统》实验报告实验序号: 5 实验项目名称:线程的同步学 号姓 名专业、班实验地点指导教师实验时间一、实验目的及要求(1)进一步掌握Windows系统环境下线程的创建与撤销。(2)熟悉Windows系统提供的线程同步API。(3)使用Windows系统提供的线程同步API解决实际问题。二、实验设备(环境)及要求一台装有WindowsXP或Winddows2003的机器(这里默认是WindowsXP).要求:能正确使用等待对象WaitForSingleObject()或WaitForMultipleObject()及信号量对象CreateSem
2、aphore()、OpenSemaphore()、ReleaseSemaphore()等系统调用,进一步理解线程的同步。三、实验内容与步骤完成主、子两个线程之间的同步,要求子线程先执行。在主线程中使用系统调用GreateThread()创建一个子线程。主线程创建子线程后进入阻塞状态,直到子线程运行完毕后唤醒主线程。四、程序调试(结果及分析)#include"stdafx.h"#include#includestaticHANDLEh1;//线程句柄staticHANDLEhHandle1=NULL;//信号量句柄voidf
3、unc();intmain(intargc,char*argv[]){intnRetCode=0;DWORDdwThreadID1;DWORDdRes,err;hHandle1=CreateSemaphore(NULL,0,2,"Semaphorename1");//创建一个信号量if(hHandle1==NULL)printf("SemaphoreCreateFail!");elseprintf("SemaphoreCreateSuccess!");hHandle1=OpenSemaphore(SYNCHRONIZE
4、SEMAPHORE_MODIFY_
5、STATE,NULL,"SemaphoreName1");//打开信号量if(hHandle1==NULL)printf("SemaphoreOpenFail!");elseprintf("SemaphoreOpenSuccess!");h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadID1);//创建子线程if(h1==NULL)printf("Thread1createFail!");elsepri
6、ntf("Thread1createSuccess!");dRes=WaitForSingleObject(hHandle1,INFINITE);//主线程等待子线程结束err=GetLastError();printf("WaitForSingleObjecterr=%d",err);if(dRes==WAIT_TIMEOUT)printf("TIMEOUT!dRes=%d",dRes);elseif(dRes==WAIT_OBJECT_0)printf("WAIT_OBJECT!dRes=%d",dRes);elseif(dRes==WAIT
7、_ABANDONED)printf("WAIT_ABANDONED!dRes=%d",dRes);elseprintf("dRes=%d",dRes);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);returnnRetCode;}voidfunc(){BOOLrc;DWORDerr;printf("NowInThread!");rc=ReleaseSemaphore(hHandle1,1,NULL);//子线程唤醒主线程err=GetLastError();printf("ReleaseSem
8、aphoreerr=%d",err);if(rc==0)printf("SemaphoreReleaseFail!");elseprintf("SemaphoreReleaseSuccess!rc=%d",rc);}五、总结与体会该实验完成了主、子线程的同步,主线程创建子线程后,主线程阻塞,让子线程先执行,等子线程执行完毕后,由子线程唤醒主线程。六、教师评语签名:日期:成绩