windows多執行緒同步 臨界區

2021-08-29 15:49:22 字數 2067 閱讀 9570

推薦參考部落格:秒殺多執行緒第五篇 經典執行緒同步 關鍵段cs

關於臨界區的觀念,一般作業系統書上面都有。

適用範圍:它只能同步乙個程序中的執行緒,不能跨程序同步。一般用它來做單個程序內的**快同步,效率比較高

windows中與臨界區有關的結構是 critical_section,關於該結構體的內部結構可參考here

使用時,主線程中要先初始化臨界區,最後要刪除臨界區,具體使用見下面**:

從乙個例子來說明:假設有三個執行緒都需要使用印表機,我們可以把列印的**放到臨界區,這樣就可以保證每次只有乙個執行緒在使用印表機。

#include

#include

#include

#include

usingnamespacestd;

//定義乙個臨界區

critical_section g_cs;

//執行緒繫結的函式返回值和引數是確定的,而且一定要__stdcall

unsigned __stdcall threadfun(void*param)

intmain()

再看另外乙個問題:編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a、b、c,每個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示;如:abcabc….依次遞推, 仿照文章windows多執行緒同步--訊號量中的**,我們把訊號量替換成臨界區。

#include

#include

#include

#include

usingnamespacestd;

//宣告3個臨界區

critical_section  g_cs1, g_cs2, g_cs3;

//執行緒繫結的函式返回值和引數是確定的,而且一定要__stdcall

unsigned __stdcall threadfuna(void*)

return1;

}

unsigned __stdcall threadfunb(void*)

return2;

}

unsigned __stdcall threadfunc(void*)

return3;

}

intmain()

關於臨界區的詳細解釋清參考秒殺多執行緒第五篇 經典執行緒同步 關鍵段cs

執行緒同步之臨界區

臨界區 當兩個執行緒競爭同一資源時,如果對資源的訪問順序敏感,就稱存在競態條件。導致競態條件發生的 區稱作臨界區。臨界區執行緒同步適用範圍 它只能同步乙個程序中的執行緒,不能跨程序同步。一般用它來做單個程序內的 快同步,效率比較高。在.net中有monitor lock等方式是以臨界區的方式來實現執...

多執行緒程式設計 臨界區

1 windows api建立執行緒 include 包含相應標頭檔案 include dword winapi myfun1 lpvoid lpparameter 宣告執行緒函式 dword winapi myfun2 lpvoid lpparameter int main 主函式 else 如果...

Linux多執行緒臨界區問題

臨界區指的是乙個訪問共用資源 例如 共用裝置或是共用儲存器 的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性。當有執行緒進入臨界區段時,其他執行緒或是程序必須等待,有一些同步的機制必須在臨界區段的進入點與離開點實現,以確保這些共用資源是被互斥獲得使用,例如 semaphore。只能被單一執...