搜档网
当前位置:搜档网 › windows进程管理实验报告

windows进程管理实验报告

windows进程管理实验报告
windows进程管理实验报告

实验报告

课程名称:操作系统

实验项目:windows进程管理

姓名:

专业:计算机科学与技术

班级:

学号:

计算机科学与技术学院

计算机系

2019 年 4 月 23 日

实验项目名称: windows进程管理

一、实验目的

1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用;

2. 利用C++实现线程创建、线程撤销、线程同步程序;

3. 完成思考、设计与练习。

二、实验用设备仪器及材料

1. Windows 7或10, VS2010及以上版本。

三、实验内容

1 线程创建与撤销

写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。

相关系统调用:

线程创建: CreateThread()

线程撤销: ExitThread()

线程终止: ExitThread(0)

线程挂起: Sleep()

关闭句柄: CloseHandle()

参考代码:

;

}

运行结果如图所示。

完成以下设计题目:

1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。

2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

实验内容2 线程同步

完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。

相关系统调用:

等待对象 WaitForSingleObject(), WaitForMultipleObjects();

信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore();

HANDLE WINAPI CreateSemaphore(

_In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes

_In_ LONG lInitialCount,

_In_ LONG lMaximumCount,

_In_opt_ LPCTSTR lpName

);

第一个参数:安全属性,如果为NULL则是默认安全属性

第二个参数:信号量的初始值,要>=0且<=第三个参数

第三个参数:信号量的最大值

第四个参数:信号量的名称

返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码:

n");

rc=ReleaseSemaphore(hHandle1,1,NULL);

err=GetLastError();

printf("Release Semaphore err=%d\n",err);

if(rc==0) printf("Semaphore Release Fail.\n");

else printf("Semaphore Release Success. rc=%d\n",rc);

}

编译运行,结果如图所示。

完成以下设计题目:

3. 用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。

四、实验结果

实验内容1

1.向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。

结果:

;

}

2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

n");

n");

}

void ThreadName3()

{

printf("This is a Thread C.\n");

}

实验内容2

2.用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。

n");

rc = ReleaseSemaphore(hHandle1, 1, NULL);

err = GetLastError();

printf("Release Semaphore err=%d\n", err);

if (rc == 0) printf("Semaphore Release Fail.\n");

else {

printf("Semaphore Release Success. rc=%d\n", rc);

}

}

void fund()

{

BOOL rc;

DWORD err;

printf("Now in Thread.\n");

rc = ReleaseSemaphore(hHandle2, 1, NULL);

err = GetLastError();

printf("Release Semaphore err=%d\n", err);

if (rc == 0) printf("Semaphore Release Fail.\n");

else {

printf("Semaphore Release Success. rc=%d\n", rc);

}

}

void fune()

{

BOOL rc;

DWORD err;

printf("Now in Thread.\n");

rc = ReleaseSemaphore(hHandle3, 1, NULL);

err = GetLastError();

printf("Release Semaphore err=%d\n", err);

if (rc == 0) printf("Semaphore Release Fail.\n");

else {

printf("Semaphore Release Success. rc=%d\n", rc);

}

}

相关主题