下面是使用 CCriticalSection::Lock 方法的简单示例:
#include <afxmt.h>
// ...
CCriticalSection g_criticalSection; // 全局临界区对象
// ...
// 在某个函数或代码块中使用临界区
void SomeFunction()
{
// ...
g_criticalSection.Lock(); // 进入临界区
// 在这里执行需要同步的操作
g_criticalSection.Unlock(); // 离开临界区
// ...
}
在这个例子中,g_criticalSection.Lock() 用于进入临界区,从而确保在同一时刻只有一个线程可以执行临界区内的代码。在执行完需要同步的操作后,通过调用 g_criticalSection.Unlock() 来离开临界区。
需要注意的是,为了防止由于异常等原因导致临界区未能正确解锁,最好使用 RAII(Resource Acquisition Is Initialization)原则,可以使用 CAutoLock 对象:
#include <afxmt.h>
// ...
CCriticalSection g_criticalSection; // 全局临界区对象
// ...
// 在某个函数或代码块中使用临界区
void SomeFunction()
{
// ...
CAutoLock lock(&g_criticalSection); // 进入临界区,离开临界区时会自动调用 Unlock
// 在这里执行需要同步的操作
// 不需要显式调用 Unlock
// ...
}
CAutoLock 的构造函数会在创建时自动调用 Lock 进入临界区,而在对象离开作用域时,会自动调用 Unlock 离开临界区,这样可以更安全地管理临界区的使用。
转载请注明出处:http://www.zyzy.cn/article/detail/16096/MFC/CCriticalSection