多執行緒同步機制包括:1、Critical Section(臨界區),用來實現「排他性佔有」;2、Semaphore,用來追蹤有限的資源;3、Mutex,可以在不同的執行緒之間實現“排他性佔有”,甚至即使那些執行緒分屬不同進程;4、Event,通常使用於overlapped I/O,或用來設計某些自訂的同步物件。
本文操作環境:Windows7系統,Dell G3電腦。
多執行緒同步機制包括:
1、Critical Section
Critical section(臨界區)用來實現“排他性佔有」。適用範圍是單一行程的各執行緒之間。它是:
一個局部性對象,不是一個核心對象。
快速且有效率。
不能夠同時有一個以上的 critical section 被等待。
無法偵測是否已被某個執行緒放棄。
可以實作執行緒間互斥,不能用來實現同步。
2、Semaphore
Semaphore 用來追蹤有限的資源。它是:
一個核心物件。
沒有擁有者。
可以有名,因此可以被其他行程開啟。
可以被任何一個線程釋放(released)。
既能實現執行緒間互斥,也能實現執行緒間同步。
在跨進程中使用時,如果擁有信號量的執行緒意外結束,其它進程不會收到通知。
3、Mutex
Mutex 是核心對象,可以在不同的執行緒之間實現“排他性佔有”,甚至即使那些線程分屬不同進程。它是:
一個核心物件。
如果擁有 mutex 的那個執行緒結束,則會產生一個 “abandoned” 錯誤訊息。
i可以具名,因此可以被其他行程開啟。
只能被擁有它的那個線程釋放(released)。
在跨進程中使用時,如果擁有互斥器的進程意外結束,則其它進程會收到一個
WAIT_ABANDOEND
訊息。
4、Event
Event object 通常使用於 overlapped I/O,或用來設計某些自訂的同步物件。它是:
一個核心物件。
可是用來實現執行緒的互斥與同步。
可以具名,因此可以被其他行程開啟。
在跨進程中使用時,如果擁有信號量的執行緒意外結束,其它進程也不會受到通知。
注意:臨界區和互斥器都有「執行緒所有權」的概念,所以它們是不能用來實現執行緒間的同步的,只能用來實現互斥。原因是因為創建臨界區或互斥器的執行緒可以不用等待LeaveCriticalSection()
,SetEvent()
就可以無條件進入保護的程式段,因為它擁有這個權利。另外,互斥器可以很好的處理」遺棄「操作。若執行緒在未釋放對向象的時候就意外終止的,其它執行緒可以等待到一個WAIT_ABANDONED_0
。但是事件和信號量都不能做到。
事件和信號量都可以實現執行緒和進程間的互斥和同步。
就使用效率來說,臨界區的效率是最高的,因為它不是內核對象,而其它的三個都是核心對象,要藉助作業系統來實現,效率相對來說就比較低。
但如果要跨行程使用還是要用到互斥器、事件物件和信號量。
總之:在設計時,首先盡量不要使用全域變量,如果不得以先然後考慮使用Inter...()函數,然後在是臨界區對象,最後才是事件、互斥器、信號量。
以上是多執行緒同步機制包括哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器