我有一个类(单例),它包含一个静态字典
private static Dictionary<string, RepositoryServiceProvider> repositoryServices = null;
在此类的实例中,我填充字典(可以从多个线程发生)。起初我只是
RepositoryServiceProvider service = null;
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
service = new RepositoryServiceProvider(this.Server);
repositoryServices.Add(this.Server.Name, service);
}
然后我得到了一些例外,因为 Item 已经添加,所以我将其更改为:
RepositoryServiceProvider service = null;
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
lock (padlock) {
repositoryServices.TryGetValue(this.Server.Name, out service);
if (service == null) {
service = new RepositoryServiceProvider(this.Server);
repositoryServices.Add(this.Server.Name, service);
}
}
}
挂锁在类中:
private static readonly object padlock = new object();
这个线程安全吗?或者它过于复杂?或者我应该使用并发词典 http://msdn.microsoft.com/en-us/library/dd287191.aspx?