Обоснование блокировки внутри блокировки?

Я просматривал пример кода в книге и наткнулся на следующий код (упрощенный). В коде, когда вызывается 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);
      }
   }
}
5
задан Yeonho 21 December 2011 в 07:02
поделиться