Posted on 2007-04-03 19:34
kk 閱讀(4175)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
IT
Critical Section
Critical section(臨界區(qū))用來實(shí)現(xiàn)“排他性占有”。適用范圍是單一進(jìn)程的各線程之間。它是:
· 一個(gè)局部性對(duì)象,不是一個(gè)核心對(duì)象。
· 快速而有效率。
· 不能夠同時(shí)有一個(gè)以上的critical section被等待。
· 無法偵測是否已被某個(gè)線程放棄。
Mutex
Mutex是一個(gè)核心對(duì)象,可以在不同的線程之間實(shí)現(xiàn)“排他性占有”,甚至幾十那些現(xiàn)成分屬不同進(jìn)程。它是:
· 一個(gè)核心對(duì)象。
· 如果擁有mutex的那個(gè)線程結(jié)束,則會(huì)產(chǎn)生一個(gè)“abandoned”錯(cuò)誤信息。
· 可以使用Wait…()等待一個(gè)mutex。
· 可以具名,因此可以被其他進(jìn)程開啟。
· 只能被擁有它的那個(gè)線程釋放(released)。
Semaphore
Semaphore被用來追蹤有限的資源。它是:
· 一個(gè)核心對(duì)象。
· 沒有擁有者。
· 可以具名,因此可以被其他進(jìn)程開啟。
· 可以被任何一個(gè)線程釋放(released)。
Event Object
Event object通常使用于overlapped I/O,或用來設(shè)計(jì)某些自定義的同步對(duì)象。它是:
· 一個(gè)核心對(duì)象。
· 完全在程序掌控之下。
· 適用于設(shè)計(jì)新的同步對(duì)象。
· “要求蘇醒”的請(qǐng)求并不會(huì)被儲(chǔ)存起來,可能會(huì)遺失掉。
· 可以具名,因此可以被其他進(jìn)程開啟。
Interlocked Variable
如果Interlocked…()函數(shù)被使用于所謂的spin-lock,那么他們只是一種同步機(jī)制。所謂spin-lock是一種busy loop,被預(yù)期在極短時(shí)間內(nèi)執(zhí)行,所以有最小的額外負(fù)擔(dān)(overhead)。系統(tǒng)核心偶爾會(huì)使用他們。除此之外,interlocked variables主要用于引用技術(shù)。他們:
· 允許對(duì)4字節(jié)的數(shù)值有些基本的同步操作,不需動(dòng)用到critical section或mutex之類。
· 在SMP(Symmetric Multi-Processors)操作系統(tǒng)中亦可有效運(yùn)作。