当资源是静态时,从不同的线程访问相同的资源

时间:2013-07-23 16:52:11

标签: c# multithreading

所以我在应用程序启动时设置了一个Dictionary实例。这个字典的内容在应用程序的生命周期内没有变化(因为它永远不会被修改,只能从​​中读取)。

我还需要保持资源线程安全吗? 当两个线程同时尝试访问它时它会抛出异常,即使它们只是从它读取并且从不修改它吗?

BR Tomas A

3 个答案:

答案 0 :(得分:2)

不,您不需要锁定只读资源。锁定的目的是在编写资源之前检查资源的值,以便其他资源不能更改读取和写入之间的值。

答案 1 :(得分:0)

您可以在此处阅读有关词典集合的内容MSDN

  

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

     

有关线程安全的替代方法,请参阅ConcurrentDictionary

     

此类型的公共静态(在Visual Basic中为Shared)成员是线程安全的

答案 2 :(得分:0)

Dictionary<TKey, TValue> documentation开始,您就安全了:

  

线程安全

     

Dictionary<TKey, TValue>可以支持多个读者   同时,只要集合未被修改。即使是这样,   通过集合枚举本质上不是线程安全的   程序。在极少数情况下,枚举与写入竞争   访问时,必须在整个枚举期间锁定集合。   允许多个线程访问集合以进行读取   和写作,你必须实现自己的同步。

     

有关线程安全的替代方法,请参阅ConcurrentDictionary<TKey, TValue>

如果您使用的是.Net 4.5,将字典公开为IReadOnlyDictionary<TKey, TValue>可能是有意义的,以帮助确保以线程安全的方式使用它。