2011-04-11 112 views
2

我理解互斥體的概念。它很好地解釋了here.NET如何實現互斥鎖?

但是現在我想知道互斥鎖究竟是什麼。我的猜測是,.NET正在使用一些原始系統資源(甚至可能只是一個內存地址?)並將其包裝在一個稱爲互斥體的對象中。

任何人都知道如何在.NET中實現互斥?

+1

也可能相關:[如何實現互斥體,語言不可知](http://stackoverflow.com/questions/1485924/how-are-mutexes-implemented) – 2011-04-11 22:48:54

+7

我很確定它只是將Win32 Mutex目的。你在尋找關於如何實現Win32互斥體的細節? – 2011-04-11 22:49:36

+0

@Michael:如果那是真的,我們可以鑽那麼。 Win32互斥量如何實現? – richard 2011-04-11 22:53:17

回答

5

互斥鎖如何實現很可能取決於硬件。大多數CPU都有某種原子比較和交換指令,這些指令提供了這個東西的膽量。

但是,在引擎蓋下,它只是一個信號量—一個東西(可能是單詞),它的值表示它是否發出信號。 OS爲線程或進程提供了一種閒置等待的手段,等待信號量進入所需的狀態。大多數實現中,我相信並不能保證線程只是因爲你是第一個獲得對互斥量的所有權的順序,並不意味着你會成爲第一個獲得它的人。

+0

「這只是一個信號量」 - 這就是我想的!看起來它只是一個簡單的信號量,只是一個線程可以訪問資源。是對的嗎? – richard 2011-04-12 06:43:10

0

http://msdn.microsoft.com/en-us/magazine/cc164040.aspx會給你的細節。 .NET Mutexes在一天結束時基於Win32線程原語,儘管有些事情有點不同(請記住,'lock'語句適用於任何對象,所以CLR中有一些名爲SyncBlocks的內容處理那)。