用于并发读写操作的ConcurrentDictionary类型。由于我的场景中只有读取操作,我想知道是否可以使用词典?
顺便问一下,ConcurrentDictionary如何通过多个线程为R / W服务?是否隐式使用某种锁来使所有R / W操作序列化?
答案 0 :(得分:24)
同时阅读字典是否可以?
Dictionary<TKey, TValue>
Class线程安全
只要不修改集合,词典就可以同时支持多个阅读器。即便如此,通过集合枚举本质上不是一个线程安全的过程。在枚举与写访问争用的极少数情况下,必须在整个枚举期间锁定该集合。要允许多个线程访问集合以进行读写,您必须实现自己的同步。
对于字典的修改和写入操作,ConcurrentDictionary使用细粒度锁定来确保线程安全。 (对字典的读取操作以无锁方式执行。)
至于:
ConcurrentDictionary如何通过多个线程为R / W服务?
ConcurrentDictionary<TKey, TValue> Class
说明
对于字典的修改和写入操作,ConcurrentDictionary使用细粒度锁定来确保线程安全。 (对字典的读取操作以无锁方式执行。)
答案 1 :(得分:15)
是的,同时阅读Dictionary
是完全有效的操作。根据{{3}}的线程安全部分,
只要未修改集合,
Dictionary<TKey,TValue>
可以同时支持多个阅读器。
这不仅限于字典:所有数据结构在只读模式下都是线程安全的。这就是为什么不可变数据结构用于线程安全的原因。
ConcurrentDictionary如何通过多个线程为R / W服务?
它在写入操作周围使用细粒度锁定以确保线程安全。字典上的读取操作以无锁方式执行。