我一直在研究嵌套和多锁,但我还没有找到解决这个特定方案的地方。
class x
{
Method1()
{
Lock (object)
{
Method2();
}
}
Method2()
{
Lock (object)
{
//do stuff
}
}
}//close class x
锁定对象可以是相同的还是必须不同?
一种方法优于另一种方法吗?
答案 0 :(得分:6)
它们可以是相同的,因为lock
(Monitor)在.NET中是reentrant。
Monitor.Enter的文档中提到了这一点:
同一个线程在没有阻塞的情况下多次调用Enter是合法的;但是,在等待对象的其他线程将解除阻塞之前,必须调用相同数量的Exit调用。
由于同一个线程可以多次使用同一个对象进入锁定,因此上述代码可以很好地共享同一个同步对象。