Я читал в Albahari отличную книгу о потоке и натолкнулся на следующий сценарий, он упоминает, что "нить может многократно блокировать один и тот же объект при вложенном (реентерабельном) способе"
lock (locker)
lock (locker)
lock (locker)
{
// Do something...
}
а также
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"); }
}
Из объяснения, любые потоки будут блокироваться на первом (внешнем) замке и что он разблокирован только после выхода внешней блокировки.
Он утверждает, что "вложенная блокировка полезна, когда один метод вызывает другого в пределах блокировки"
Почему это полезно? Когда вам НУЖНО это сделать и какая проблема будет решена?