3

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

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


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

}//close class x

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

一种方法比另一种方法有优势吗?

4

1 回答 1

6

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

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

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

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

于 2012-08-23T17:09:23.813 回答