实验三 线程的互斥
一、实验目的
- 熟练掌握Windows系统环境下线程的创建与撤销。
- 熟悉Windows系统提供的线程互斥API。
- 使⽤Windows系统提供的线程互斥API解决实际问题。
二、实验准备
理论知识
- 两种形式的制约关系
- 间接互相制约的关系
- 直接相互制约的关系(这次任务,互斥的关系)
- 两种解决方式
- 临界资源
- 遵循临界区概念
while (TURE)
{
进入区
临界区
退出区
剩余区
}
相关API函数介绍
临界区对象
初始化临界区 | 进入临界区 | 退出临界区 | 删除临界区 | |
---|---|---|---|---|
说明 | InitializeCriticalSection()⽤于初始化临界区对象。 | EnterCriticalSection()等待进⼊临界区的权限,当获得该权限后进⼊临界区。 | LeaveCriticalSection()释放临界区的使⽤权限。 | DeleteCriticalSection()删除与临界区有关的所有系统资源。 |
原型 | VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection ) | VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection ); | VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection ); | VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection ); |
参数说明 | lpCriticalSection:指出临界区对象的地址。 | lpCriticalSection:指出临界区对象的地址。 | lpCriticalSection:指出临界区对象的地址。 | lpCriticalSection:指出临界区对象的地址。 |
返回值 | 无 | 无 | 无 | 无 |
三、实验内容
(一)实验内容
- 在 Visual C++ 6.0 环境下建⽴⼀个MFC⽀持的控制台⼯程⽂件,编写C程序,在主线程中使用InitializeCriticalSec2tion()初始化临界区,然后建⽴两个⼦线程,在两个⼦线程中使⽤全局变量 count 的前、后分别使用EnterCriticalSeation()进⼊临界区LeaveCriticalSection()退出临界区,等两个⼦线程运⾏完毕,主线程使⽤DeleteCriticalSection()删除临界区并撤销线程。
(二)主要代码
// 03.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "03.h"
#ifdef _DEBUG
#define new DEBUG_NEW