C#Dictionary <T,K>单作者多读取器的线程安全

Mr.*_*oor 1 .net c# dictionary base-class-library

只要未修改集合,Dictionary就可以同时支持多个读取器.即便如此,通过集合枚举本质上不是一个线程安全的过程.在枚举与写访问争用的极少数情况下,必须在整个枚举期间锁定该集合.要允许多个线程访问集合以进行读写,您必须实现自己的同步.

这就是MSDN所说的.

如果没有必要,我不想使用ConcurrentDictionary

我假设,如果只有一个线程执行写入操作Dictionary<T,K>,则其他线程可以安全地同时执行简单的读取操作(如TryGetValue不枚举)而不获取锁定,我是否正确?

Sri*_*vel 5

我假设,如果只有一个线程在Dictionary上执行编写器操作,则其他线程可以安全地同时执行简单的读取操作(如TryGetValue而不是枚举)而无需获取锁定

不,你的假设是错的.只有当没有作者修改字典时才安全,而不是当你有一个作家时.

ReaderWriterLockSlim完全被设计用于此场景.这就是说我只使用ConcurrentDictionary而不是重新发明轮子.