臨界區是一種防止多個線程同時執行一個特定代碼段的機制。如果有多個線程試圖同時訪問臨界區,那麼在有一個線程進入後其他試圖訪問此臨界區的線程將被掛起,並一直持續到臨界區的線程離開。
臨界區適用於多個線程之間沒有先後順序但要求互斥的同步。
定義臨界區變量:
CRITICAL_SECTION criticalSection;初始化臨界區
VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);刪除臨界區
VOID WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);進入臨界區
VOID WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);離開臨界區
VOID WINAPI LeavesCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
使用臨界區編程的一般方法:
void WriteData(){
EnterCriticalSection(&gCriticalSection);
//do something
LeaveCriticalSection(&gCriticalSection);
}