同步機制摘要

 Critical section(臨界區)用來實現“排他性佔有”。適用範圍是單一進程的各線程之間。它是:
一個局部性對象,不是一個核心對象。
 快速而有效率。
不能夠同時有一個以上的critical section被等待。
無法偵測是否已被某個線程放棄。
Mutex
Mutex是一個核心對象,可以在不同的線程之間實現“排他性佔有”,甚至即使那些線程分屬不同進程。它是:
一個核心對象
 如果擁有Mutex的那個線程結束,則會產生一個“abandoned”錯誤信息。
 可以使用Wait…()等待一個mutex.
 可以具名,因此可以被其他進程開啓。
 只能被擁有它的那個線程釋放。
Semaphore
Semaphore被用來追蹤有限的資源,它是:
一個核心對象。
 沒有擁有者
可以具名,因此可以被其他進程開啓。
可以被任何一個線程釋放。
Event Object
Event Object通常使用於overlapped I/O,或用來設計某些自定義的同步對象,它是
 一個核心對象。
 完全在程序掌控之下。
適用於設計新的同步對象。
“要求甦醒”的請求並不會被儲存起來,可能會遺失掉。
可以具名,因此可以被其他進程開啓。
Interlocked Variable
如果Interlocked…()函數被使用於所謂的spin-lock,那麼它們只是一種同步機制。所謂spin-lock是一種busy loop,被預期在極短時間內執行,所以有最小的額外負擔,系統核心偶爾會使用它們,主要用於引用計數。它們:
允許對4字節的數值有些基本的同步操作,不需動用到critical section或mutex之類。
在SMP操作系統中亦可有效運作。
InterlockedIncrement(); interlockedDecrement();

發佈了38 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章