Я просматривал пример кода в книге и наткнулся на следующий код (упрощенный).
В коде, когда вызывается Subscribe (T subscriber)
, поток входит в секцию блокировки.
а затем, когда код внутри блокировки вызывает метод AddToSubscribers (T subscriber)
, метод имеет другую блокировку. зачем нужна эта вторая блокировка?
public abstract class SubscriptionManager<T> where T : class
{
private static List<T> subscribers;
private static void AddToSubscribers(T subscriber)
{
lock (typeof(SubscriptionManager<T>))
{
if (subscribers.Contains(subscriber))
return;
subscribers.Add(subscriber);
}
}
public void Subscribe(T subscriber)
{
lock (typeof(SubscriptionManager<T>))
{
AddToSubscribers(subscriber);
}
}
}