**
操作系统实验三——线程的互斥
**
一、 实验目的
(1)熟练掌握windows系统环境下线程的创建和撤销。
(2)熟悉windows系统提供的线程互斥API。
(3)使用windows系统提供的线程互斥API解决实际问题。
二、 实验准备
相关API函数介绍
1)临界区对象
临界区对象(CriticalSection)包括:
(1)初始化临界区(InitializeCriticalSection())
(2)进入临界区(EnterCriticalSection())
(3)退出临界区(LeaveCriticalSection())
(4)删除临界区(DeleteCriticalSection())
等API函数。
(1)初始化临界区
InitializeCriticalSection()用于初始化临界区对象。
原型:
VOID InitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
参数说明:
lpCriticalSection:指出临界区对象的地址。
返回值:该函数没有返回值。
用法举例:
LPCRITCAL_SECTION hCriticalSection;
CRITICAL_SECTION Critical;
hCriticalSection=&Critical;
InitializeCriticalSection(hCriticalSection);
(2)进入临界区
EnterCriticalSection()等待进入临界区的权限,当获得该权限后进入临界区。原型:
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
参数说明:
lpCriticalSection:指出临界区对象的地址。
返回值:该函数没有返回值。
用法举例:
LPCRITICAL_SECTION hCriticalSection;
CRITICAL_SECTION Critical;
hCriticalSection=&Critical;
EnterCriticalSection(hCriticalSection);
(3)退出临界区
CriticalSectionLeaveCriticalSection()释放临界区的使用权限。
原型:
VOID LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
参数说明:
lpCriticalSection:指出临界区对象的地址。
返回值:该函数没有返回值
用法举例:
LPCRITICAL_SECTION hCriticalSection;
CRITICAL_SECTION Critical;
hCriticalSection=&Critical;
LeaveCriticalSection(hCriticalSection);
(4)删除临界区
DeleteCriticalSection()删除与临界区有关的所有系统资源。
原型:
VOID DeleteCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
参数说明:
lpCriticalSection:指出临界区对象的地址。
返回值:该函数没有返回值。
用法举例:
LPCRITICAL_SECTION hCriticalSection;
CRITICAL_SECTION Critical;
hCriticalSection=