何时在C#中使用Monitor
类或lock
关键字保证线程安全?
编辑:
从目前为止的答案来看,lock
是一系列调用Monitor
类的简写。lock调用到底是什么简写?或者更明确地说,
class LockVsMonitor
{
private readonly object LockObject = new object();
public void DoThreadSafeSomethingWithLock(Action action)
{
lock (LockObject)
{
action.Invoke();
}
}
public void DoThreadSafeSomethingWithMonitor(Action action)
{
// What goes here ?
}
}
更新
非常感谢大家的帮助:我已经发了另一个问题,以跟进你们提供的一些信息。由于你们似乎在这个领域很熟练,所以我将链接放在这里:这个锁定和管理锁定异常的解决方案有什么问题?
lock
块内使用try-catch/finally来完成。 - CodesInChaosPulse
。它在一些高级多线程场景中非常重要。我从未直接使用过Pulse
。 - CodesInChaos