.Net中的静态字典线程安全

Emm*_*uel 1 c# dictionary thread-safety

阅读字典的msdn文档,它说:"这种类型的公共静态(在Visual Basic中共享)成员是线程安全的.任何实例成员都不能保证是线程安全的."

这意味着用这样的字典:


static object syncObject = new object();
static Dictionary<string,MyObject> mydictionary= new Dictionary<string, MyObject>();
Run Code Online (Sandbox Code Playgroud)

是否做了类似下面的代码不必要的事情?


lock (syncObject)
{
   context = new TDataContext();
   mydictionary.Add("key", myObject);
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*der 7

它指的是类本身的静态方法.该语句实际上是添加到大多数类的样板文档.Dictionary <>类实际上不公开任何静态方法.

您必须使用lock关键字或者甚至是ReaderWriterLock自行序列化对您的字典类的访问.虽然线程是一个非常复杂的主题,但lock关键字并不总是合适的.Joe Duffy撰写了一本很棒的书" Windows上的Concurrent Programming ",它深入介绍了保护共享应用程序资源的方法.