在 MFC(Microsoft Foundation Classes)中,CCriticalSection::Lock 是 CCriticalSection 类的公共方法之一,用于进入临界区。临界区是一种同步机制,它确保在同一时刻只有一个线程可以执行临界区内的代码,从而避免多线程并发访问导致的问题。

以下是使用 CCriticalSection::Lock 的简单示例:
#include <afxmt.h>

// ...

CCriticalSection g_criticalSection; // 全局临界区对象

// ...

// 在某个函数或代码块中使用临界区
void SomeFunction()
{
    // ...

    g_criticalSection.Lock(); // 进入临界区

    // 在这里执行需要同步的操作

    g_criticalSection.Unlock(); // 离开临界区

    // ...
}

在这个例子中,g_criticalSection.Lock() 被用于进入临界区。当一个线程执行 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/16098/MFC/CCriticalSection