臨界區

臨界區是一種防止多個線程同時執行一個特定代碼段的機制。如果有多個線程試圖同時訪問臨界區,那麼在有一個線程進入後其他試圖訪問此臨界區的線程將被掛起,並一直持續到臨界區的線程離開。
臨界區適用於多個線程之間沒有先後順序但要求互斥的同步。

  1. 定義臨界區變量:
    CRITICAL_SECTION criticalSection;

  2. 初始化臨界區
    VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

  3. 刪除臨界區
    VOID WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

  4. 進入臨界區
    VOID WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

  5. 離開臨界區
    VOID WINAPI LeavesCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
    使用臨界區編程的一般方法:
    void WriteData(){
    EnterCriticalSection(&gCriticalSection);
    //do something
    LeaveCriticalSection(&gCriticalSection);
    }

發佈了28 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章