搜尋
首頁常見問題多執行緒同步機制包括哪些

多執行緒同步機制包括哪些

Jan 07, 2021 pm 03:24 PM
多執行緒同步機制

多執行緒同步機制包括: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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

Safe Exam Browser

Safe Exam Browser

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

MantisBT

MantisBT

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器