windows进程管理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:操作系统
实验项目: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);
}
}