我正在审查一本书中的示例代码,遇到了以下简化版代码。在代码中,当调用
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);
}
}
}
T
来存储的。 - Marc Gravell