我正在阅读Albahari关于线程的优秀电子书,并遇到以下情况他提到"一个线程可以以嵌套(可重入)方式重复锁定同一个对象"
lock (locker)
lock (locker)
lock (locker)
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
以及
static readonly object _locker = new object();
static void Main()
{
lock (_locker)
{
AnotherMethod();
// We still have the lock - because locks are reentrant.
}
}
static void AnotherMethod()
{
lock (_locker) { Console.WriteLine ("Another method"); }
}
Run Code Online (Sandbox Code Playgroud)
根据解释,任何线程都会阻塞第一个(最外面的)锁,并且只有在外部锁退出后才会解锁.
他说"当一个方法在一个锁中调用另一个方法时,嵌套锁定很有用"
为什么这有用?你什么时候需要这样做,它解决了什么问题?