操作系统实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)
实验名称实验二课程名称操作系统课程号
学院(系) 信息学院专业物联网工程班级1131
学生姓名杨光学号201311672119 实验地点实验日期
实验1:线程的创建与撤销
1.实验目的
(1)熟悉Windows系统提供的线程创建与撤销系统调用。
(2)掌握Windows系统环境下线程的创建与撤销方法。
2.实验要求
能正确使用CreateThread()、ExitThread()及Sleep()等系统调用,进
一步理解进程与线程理论。
代码一:
// ThreadCreate.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "ThreadCreate.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;
void ThreadName1();
static HANDLE hHandle1=NULL; //用于存储线程返回句柄的变量。
DWORD dwThreadID1; //用于存储线程标识符的变量。
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hHandle1 = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadName1,
(LPVOID) NULL,
0, &dwThreadID1 );
Sleep(5000);
CloseHandle(hHandle1);
ExitThread(0);
return nRetCode;
}
void ThreadName1()
{
printf("Thread is Runing!\n");
}
3.过程截图:
实验2:线程的同步
1.实验目的
(1)进一步掌握Windows系统环境下线程的创建与撤销。(2)熟悉Windows系统提供的线程同步API。
(3)使用Windows系统提供的线程同步API解决实际问题。
2.实验要求
能正确使用等待对象WaitForSingleObject()或WaitForMultipleObeject()及信号量对象CreateSemaphore()、OpenSemaphore()、RealeaseSemaphore()等系统调用,进一步理解线程的同步
代码二:
// Semaphore.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Semaphore.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 HANDLE h1;
static HANDLE hHandle1=NULL;
void func();
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
DWORD dwThreadID1;
DWORD dRes,err;
hHandle1=CreateSemaphore(NULL,0,1,"SemaphoreName1");
if (hHandle1==NULL) printf("Semaphore Create Fail!\n");
else printf("Semaphore Create Success!\n");
hHandle1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL," SemaphoreName1");
if (hHandle1==NULL) printf("Semaphore Open Fail!\n");
else printf("Semaphore Open Success!\n");
h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)func,
(LPVOID)NULL,
0,&dwThreadID1);
if (h1==NULL) printf("Thread1 create Fail!\n");
else printf("Thread1 create Success!\n");
dRes=WaitForSingleObject(hHandle1,INFINITE);
err=GetLastError();
printf("WaitForSingleObject err=%d\n",err);
if (dRes == WAIT_TIMEOUT) printf("TIMEOUT!dRes=%d\n",dRes);
else if (dRes == WAIT_OBJECT_0) printf("WAIT_OBJECT!dRes=%d\n",dRes);
else if (dRes == WAIT_ABANDONED)
printf("WAIT_ABANDONED!dRes=%d\n",dRes);
else printf("dRes=%d\n",dRes);
CloseHandle(h1);
CloseHandle(hHandle1);
ExitThread(0);
return nRetCode;
}
void func()
{
BOOL rc;
DWORD err;
printf(" Now In Thread !\n");
rc=ReleaseSemaphore(hHandle1,1,NULL);
err=GetLastError();
printf("ReleaseSemaphore err=%d\n",err);
if (rc==0) printf("Semaphore Release Fail!\n");
else printf("Semaphore Release Success!rc=%d\n",rc);