-
05-09-2019 - |
解决方案
例如在C#的.NET锁语句等价于:
Monitor.Enter(object);
try
{
// Your code here...
}
finally
{
Monitor.Exit(object);
}
然而,请记住,监视器还可以Wait()
和Pulse()
,这往往是在多线程复杂情况下非常有用。
修改强> 在.NET框架的更高版本,这变为:
bool lockTaken = false;
try
{
Monitor.Enter(object, ref lockTaken);
// Your code here...
}
finally
{
if (lockTaken)
{
Monitor.Exit(object);
}
}
其他提示
显示器是编译器辅助的“半自动”锁。它们允许一个类上声明synchronized
方法等,这仅仅是一个不同的方法来提供互斥。我发现这本书是概念的最彻底的解释,即使这主要是面向对OS的开发者。
一个锁确保互斥。
一个监视器关联到被保护的数据,并保护所需要的互斥和同步原语访问的数据。结果, 同步例如使用当你需要一个线程等待,直到一个事件发生时(例如,等待,直到另一个线程队列中放置一个项目)。
显示器是一种编程语言构造,做同样的事情作为semiphores /锁,但显示器在运行时同步控制的共享数据。相比之下,通过锁只是“纺”这可能会导致CPU利用率差保护共享数据。
有任何差别,锁try / finally块内生成Monitor.Enter和Monitor.Exit。使用监视器上的锁,您可以微调,因为它具有脉冲和PulseAll。还可以有替代处理你应该无法获取与TryEnter锁。
锁定焦点上只相互exculsion,但 箴言报自动提供互斥。
所以我们并不需要担心在监视器使用互斥的。 代替我的,我们需要consern当我们做节目只有sycronzing的。
MONITER提供编程的更系统的方法。 它,为此,是更先进的。
监视器是概念和锁是实际执行。
不隶属于 StackOverflow