Posted on 2007-04-03 19:34
kk 閱讀(4174)
評論(0) 編輯 收藏 引用 所屬分類:
IT
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)操作系統中亦可有效運作。