【发布时间】:2015-03-17 08:31:51
【问题描述】:
好的,我已经阅读了Thread safe collections in .NET 和Why lock Thread safe collections?。
前一个问题以 java 为中心,没有回答我的问题,而后一个问题的答案告诉我不需要锁定集合,因为它们应该是线程安全的。 (我是这么想的)
现在来回答我的问题, 我看到的很多开发人员(在 github 和我的组织中)已经开始使用新的线程安全集合。但是,它们通常不会解除围绕读写操作的锁定。 我不明白这一点。不是线程安全的集合......嗯,线程安全完全?
不锁定线程安全集合会带来什么影响?
编辑: PS:这是我的情况,
我有很多类,其中一些具有属性。我经常需要检查给定类型是否具有该属性(当然使用反射)。这在性能上可能很昂贵。因此决定使用ConcurrentDictionary<string,bool> 创建一个缓存。 string 是 typeName 和 bool 指定它是否具有属性。起初,缓存是空的,计划是在需要时继续添加。我遇到了ConcurrentDictionary 的GetOrAdd() 方法。我的问题也差不多,如果我应该在不加锁的情况下调用这个方法?
MSDN 上的评论说:
如果您在不同的线程上同时调用 GetOrAdd, addValueFactory 可能会被多次调用,但它的键/值对 可能不会为每次调用添加到字典中。
【问题讨论】:
标签: c# .net multithreading concurrency task-parallel-library