操作系统实验二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档