EnterCriticalSection函数是用来进入临界区的函数,用于保护共享资源的访问。下面是一个简单的使用示例:
#include#include CRITICAL_SECTION g_criticalSection; DWORD WINAPI ThreadFunc(LPVOID lpParam) { // 进入临界区 EnterCriticalSection(&g_criticalSection); // 访问共享资源 std::cout << "Thread " << GetCurrentThreadId() << " entered critical section" << std::endl; // 离开临界区 LeaveCriticalSection(&g_criticalSection); return 0; } int main() { // 初始化临界区 InitializeCriticalSection(&g_criticalSection); // 创建线程 HANDLE hThread1 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL); HANDLE hThread2 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL); // 等待线程结束 WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE); // 销毁临界区 DeleteCriticalSection(&g_criticalSection); return 0; }
上面的示例中,首先定义了一个全局的临界区变量 g_criticalSection
,然后在 ThreadFunc
中使用 EnterCriticalSection
进入临界区,访问共享资源,最后使用 LeaveCriticalSection
离开临界区。在 main
函数中,先使用 InitializeCriticalSection
初始化临界区,然后创建两个线程来执行 ThreadFunc
,最后使用 DeleteCriticalSection
销毁临界区。这样就可以保证两个线程同时只有一个线程可以进入临界区,避免了共享资源的竞争问题。