EnterCriticalSection函數是用來進入臨界區的函數,用于保護共享資源的訪問。下面是一個簡單的使用示例:
#include <iostream>
#include <Windows.h>
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
銷毀臨界區。這樣就可以保證兩個線程同時只有一個線程可以進入臨界區,避免了共享資源的競爭問題。