? Exchange:指定jiāo换值。
? Comperand:指定要和目标值比较的值。
互锁cāo作的使用方法非常简单,主线程和辅助线程对同一个全局变量进行cāo作,通过利
用InterlockedIncrcomnt 函数达到同步的目的。
2.临界区(Critical Section)
临界区是一段程序代码,在任何时候都只能被一个线程使用。如果有多个线程同时访问
临界区,这时只能有一个线程进入,其他线程则等待,直到临界区被释放。与其他同步方法
不同的是,临界区只能在单个进程内使用。使用临界区的时候要避免长时间锁住一份资源。
进入临界区后必须尽快地离开,释放资源。如果是主线程(GUI 线程)要进入一个没有被释
放的临界区,将会出现错误。
(1)InitializeCriticalSection
在使用临界区之前,必须先进行初始化。可以调用Win32 API 函数InitializeCriticalSection
初始化一个临界区对象。它的函数原型如下:
VOID InitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
函数中主要参数的意义如下。
? lpCriticalSection:指向临界区对象的指针。
(2)DeleteCriticalSection
相应的,当需要释放临界区资源时,可以调用Win32 API 函数DeleteCriticalSection 来实
现,它的函数原型如下:
VOID DeleteCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
函数中主要参数的意义如下:
? lpCriticalSection:指向临界区对象的指针。
(3)EnterCriticalSection
Win32 API 函数EnterCriticalSection 等待直到得到临界区对象的使用权,当调用线程得到
临界区对象的使用权时,函数返回。它的函数原型如下:
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
函数中主要参数的意义如下。
枫叶文学网www.fywxw.com
第9 章 多线程
·237·
? lpCriticalSection:指向临界区对象的指针。
(4)LeaveCriticalSection
Win32 API 函数LeaveCriticalSection 用来释放临界区的所有权,它的函数原型如下:
VOID LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
函数中主要参数的意义如下。
? lpCriticalSection:指向临