Windows下的四種執行緒同步方法

2021-09-25 02:21:09 字數 1899 閱讀 1161

critical section(臨界區)用來實現「排他性占有」。適用範圍是單一程序 的各執行緒之間。它是:

乙個區域性性物件,不是乙個核心物件。

快速而有效率。

不能夠同時有乙個以上的 critical section 被等待。

無法偵測是否已被某個執行緒放棄。

例子

#include #include #include using namespace std;

critical_section cs;//定義臨界區物件

int g_count = 30;

dword _stdcall proc1(lpvoid param)

return 0;

}dword _stdcall proc2(lpvoid param)

return 0;

}int main()

mutex 是乙個核心物件,可以在不同的執行緒之間實現「排他性占有」,甚 至即使那些執行緒分屬不同程序。它是:

乙個核心物件。

如果擁有 mu tex 的那個執行緒結束,則會產生乙個 「abandoned」 錯 誤資訊。

可以使用 wait...() 等待乙個 mu tex。

可以具名,因此可以被其他程序開啟。

只能被擁有它的那個執行緒釋放(released)。

例子

#include #include #include using namespace std;

handle g_mutex;//定義鎖物件

int g_count = 30;

dword _stdcall proc1(lpvoid param)

return 0;

}dword _stdcall proc2(lpvoid param)

return 0;

}int main()

semaphore 被用來追蹤有限的資源。它是:

乙個核心物件。

沒有擁有者。

可以具名,因此可以被其他程序開啟。

可以被任何乙個執行緒釋放(released)。

例子

#include #include #include using namespace std;

handle g_semaphore;//訊號量

int g_count = 30;

dword _stdcall proc1(lpvoid param)

return 0;

}dword _stdcall proc2(lpvoid param)

return 0;

}int main()

乙個核心物件。

完全在程式掌控之下。

適用於設計新的同步物件。

「要求甦醒」的請求並不會被儲存起來,可能會遺失掉。

可以具名,因此可以被其他程序開啟。

例子

#include #include #include using namespace std;

handle g_event;//事件

int g_count = 30;

dword _stdcall proc1(lpvoid param)

return 0;

}dword _stdcall proc2(lpvoid param)

return 0;

}int main()

執行緒同步的四種方式

1 臨界區 critical section 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。優點 保證在某一時刻只有乙個執行緒能訪問資料的簡便辦法 缺點 雖然臨界區同步速度很快,但卻只能用來同步本程序內的執行緒,而不可用來同步多個程序中的執行緒。2 互斥量 mutex 為協調...

執行緒同步四種方法

執行緒同步的方法 1 wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。2 sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉 interruptedexception異常。3 notify 喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並...

筆記 執行緒同步 基礎 四種同步方式

執行緒同步的概念 多個執行緒操作同一共享資源 在linux裡面建議鎖 執行緒同步的條件 1 共享資源 2 競爭關係 3 多個物件沒有同步的機制 3互斥量 mutext 1 初始化 2 lock枷鎖 3 unlock解鎖 4死鎖 第一種 對同乙個互斥量枷鎖兩次 第二種 兩個資源,乙個執行緒需要同時拿到...