多線程同步機制摘要

 Critical Section
Critical section(臨界區)用來實現“排他性佔有”。適用範圍是單一進程的各線程之間。它是:
·         一個局部性對象,不是一個核心對象。
·         快速而有效率。
·         不能夠同時有一個以上的critical section被等待。
·         無法偵測是否已被某個線程放棄。
Mutex
Mutex是一個核心對象,可以在不同的線程之間實現“排他性佔有”,甚至幾十那些現成分屬不同進程。它是:
·         一個核心對象。
·         如果擁有mutex的那個線程結束,則會產生一個“abandoned”錯誤信息。
·         可以使用Wait…()等待一個mutex。
·         可以具名,因此可以被其他進程開啓。
·         只能被擁有它的那個線程釋放(released)。
Semaphore
Semaphore被用來追蹤有限的資源。它是:
·         一個核心對象。
·         沒有擁有者。
·         可以具名,因此可以被其他進程開啓。
·         可以被任何一個線程釋放(released)。
Event Object
Event object通常使用於overlapped I/O,或用來設計某些自定義的同步對象。它是:
·         一個核心對象。
·         完全在程序掌控之下。
·         適用於設計新的同步對象。
·         “要求甦醒”的請求並不會被儲存起來,可能會遺失掉。
·         可以具名,因此可以被其他進程開啓。
Interlocked Variable
如果Interlocked…()函數被使用於所謂的spin-lock,那麼他們只是一種同步機制。所謂spin-lock是一種busy loop,被預期在極短時間內執行,所以有最小的額外負擔(overhead)。系統核心偶爾會使用他們。除此之外,interlocked variables主要用於引用技術。他們:
·         允許對4字節的數值有些基本的同步操作,不需動用到critical section或mutex之類。
·         在SMP(Symmetric Multi-Processors)操作系統中亦可有效運作。
  <script type=text/javascript> </script><SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT>
Google
發佈了187 篇原創文章 · 獲贊 0 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章