C#中的嵌套锁定

7
我正在学习C#中的多线程编程,看到了下面这段代码。
static readonly object _locker = new object();

static void Main()
{
  lock (_locker)
  {
     AnotherMethod();
     // ...some work is going on
  }
}

static void AnotherMethod()
{
  lock (_locker) { Console.WriteLine ("Another method"); }
}

我想知道什么时候需要使用嵌套锁定?为什么不能在这种情况下只使用一个锁定?


如果AnotherMethod在其他地方也被使用(而不仅仅是在Main中)... - Yahia
1
代码真的很冗余。外部lock(_locker)是不必要的,除非AnotherMethod()将被公开并从其他地方使用。 - Matthias
2个回答

4

我的第一反应是AnotherMethod可以直接调用,而不必经过Main方法,因此您可能需要嵌套锁定。


1

为了允许可重入代码。

你的例子不太合适。锁用于提供对关键部分的受控访问。

如果一个关键部分调用另一个关键部分,则会发生死锁。为了防止这种情况,允许使用可重入代码。

为什么嵌套锁不会导致死锁?


我不理解可重入代码的概念。我的代码也像这里(https://dev59.com/YXRC5IYBdhLWcg3wKtv2)一样是可重入的。它什么时候会被使用? - Alexandre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接