有什么差别 监视器 和一个 锁定?

如果一个锁只是一个实现相互排斥,然后是监测简单的一种方式使用的等待时间方法处决?

一个很好的解释将是非常有益的,谢谢...

关于

有帮助吗?

解决方案

例如在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);
    }
}

其他提示

他们相关。例如,在C# 锁定 发言是一个简单的试-最后的包装 进入一个监视器一个退出 当完成。

显示器是编译器辅助的“半自动”锁。它们允许一个类上声明synchronized方法等,这仅仅是一个不同的方法来提供互斥。我发现这本书是概念的最彻底的解释,即使这主要是面向对OS的开发者。

一个锁确保互斥。

一个监视器关联到被保护的数据,并保护所需要的互斥和同步原语访问的数据。结果, 同步例如使用当你需要一个线程等待,直到一个事件发生时(例如,等待,直到另一个线程队列中放置一个项目)。

显示器是一种编程语言构造,做同样的事情作为semiphores /锁,但显示器在运行时同步控制的共享数据。相比之下,通过锁只是“纺”这可能会导致CPU利用率差保护共享数据。

有任何差别,锁try / finally块内生成Monitor.Enter和Monitor.Exit。使用监视器上的锁,您可以微调,因为它具有脉冲和PulseAll。还可以有替代处理你应该无法获取与TryEnter锁。

锁定焦点上只相互exculsion,但 箴言报自动提供互斥。

所以我们并不需要担心在监视器使用互斥的。 代替我的,我们需要consern当我们做节目只有sycronzing的。

MONITER提供编程的更系统的方法。 它,为此,是更先进的。

监视器是概念和锁是实际执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top