2009-05-23 192 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

监控是概念,锁是实际的实现。