2009-11-19 154 views
1

可能重複:
Monitor vs Mutex in c#鎖,監視器,互斥

嗨,

在這個網站,我發現從不同的人,這使得不同混淆了不同的答案。仍然完全不清楚在三種情況下[Lock,Monitor,Mutex]的哪一種情況對於實時需求都非常有用。 這些術語之間的混淆更爲明顯。

我需要非常清晰的高級別深度差異,這對於使用三個術語中的每一個來說都具有更好的示例和清晰的理解基本上是必需的。

請在非常高的實時使用情況下提供相關信息,或者需要使用C#.NET以及很好的示例。

感謝 薩庫馬爾

+1

這個問題有非常明確的答案:http://stackoverflow.com/questions/1164038/monitor-vs-mutex-in-c – 2009-11-19 13:23:26

+0

這個問題的答案也很清楚:http://stackoverflow.com/questions/ 301160 /爲什麼是差異之間的各種線程同步選項在-c – 2009-11-19 13:25:12

回答

4
  • 「鎖定」是一個通用術語,可能意味着幾件事情
  • 鎖聲明,lock(x) { }使用Monitor類
  • Monitor類是(相對)輕便互斥類。它完全構建在託管代碼中,不需要與WIN32 API交互
  • Mutex是一個Win32類。命名互斥對跨應用程序進行同步很有用,但另外使用Monitor。
  • 你忘ResetEvents和Waithandles
9

簡體和在短:

Monitor一個是被管理的.NET同步原語(範圍是只有一個應用程序結構域)。 C#lock()除了使用Monitortry...finally子句之外什麼都不做,以確保在發生異常時釋放鎖。

Mutex是一個操作系統同步對象,它也可以用來跨多個進程同步(通過命名互斥鎖)。

+3

+1爲鎖內部使用顯示器嘗試最後 http://msdn.microsoft.com/en-us/library/ ms173179(VS.80).aspx 「使用lock關鍵字通常優於直接使用Monitor類,這是因爲lock更簡潔,並且因爲lock會確保底層監視器被釋放,即使受保護的代碼會拋出例外。」 MSDN – PRR 2009-11-19 13:57:11