2009-05-23 102 views
11

monitorlock之間的區別是什麼?監視器和鎖之間的區別?

如果一個鎖只是一個互斥的實現,那麼它只是一個利用等待時間間隔來實現方法執行的方法嗎?

一個很好的解釋是真正有用的感謝....

問候

回答

13

例如,在C#.NET鎖語句相當於:

Monitor.Enter(object); 
try 
{ 
    // Your code here... 
} 
finally 
{ 
    Monitor.Exit(object); 
} 

但是,請記住,監視器也可以Wait()Pulse(),這往往是在複雜的多線程情況下非常有用。

編輯: 在.NET Framework的更高版本,這已更改爲:

bool lockTaken = false; 
try 
{ 
    Monitor.Enter(object, ref lockTaken); 
    // Your code here... 
} 
finally 
{ 
    if (lockTaken) 
    { 
     Monitor.Exit(object); 
    } 
} 
+0

@John Gietzen:真棒...thx爲了很好的解釋。 – IAbstract 2010-02-02 07:32:06

1

顯示器是編譯器輔助的 「半自動」 的鎖。它們允許在類上聲明​​方法等。這只是提供互斥的一種不同方法。我發現this book是對這些概念最全面的解釋,儘管它主要面向OS開發人員。

0

鎖確保相互排斥。

監視器將要保護的數據與保護對數據訪問所需的互斥和同步原語相關聯。
同步用於例如當您需要一個線程來等待事件發生時(例如,等到另一個線程將一個項目放入隊列中)。

0

監視器是一種編程語言構造,與semiphores/locks具有相同的功能,但Monitors通過在運行時進行同步來控制共享數據。相反,鎖通過「旋轉」來保護共享數據,這可能導致CPU利用率較低。

-1

鎖定只關注互相排斥,但 Moniter自動提供互斥。

所以我們不需要擔心在Monitor中使用互斥。 而不是ME,我們只有在編程時才需要保存sycronzing。

Moniter提供更系統的編程方式。因此,它是更先進的。

0

沒有什麼區別,lock在try/finally塊中生成Monitor.Enter和Monitor.Exit。使用監控鎖定允許您進行微調,因爲它具有Pulse和PulseAll。如果您無法使用TryEnter獲取鎖定,也可以進行備選處理。

-1

監控是概念,鎖是實際的實現。