单个或多个锁定对象

时间:2012-08-23 16:59:40

标签: .net multithreading locking

我一直在研究嵌套和多锁,但我还没有找到解决这个特定方案的地方。

class x
{
Method1()
    {
    Lock (object)
        {
        Method2();
        }
    }


Method2()
    {
    Lock (object)
        {
        //do stuff
        }
    }

}//close class x

锁定对象可以是相同的还是必须不同?

一种方法优于另一种方法吗?

1 个答案:

答案 0 :(得分:6)

它们可以是相同的,因为lock(Monitor)在.NET中是reentrant

Monitor.Enter的文档中提到了这一点:

  

同一个线程在没有阻塞的情况下多次调用Enter是合法的;但是,在等待对象的其他线程将解除阻塞之前,必须调用相同数量的Exit调用。

由于同一个线程可以多次使用同一个对象进入锁定,因此上述代码可以很好地共享同一个同步对象。