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

本文关键字:资源 线程 访问 静态 | 更新日期: 2023-09-27 18:24:37

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

我还需要保持资源线程安全吗?当两个线程试图同时访问它时,即使两个线程都只是从中读取而从未修改它,它会抛出异常吗?

BR Tomas A

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

不,您不需要锁定只读资源。锁定的目的是在写入资源之前检查资源的值,这样另一个资源就不会在读取和写入之间更改值。

根据Dictionary<TKey, TValue>文档,您是安全的:

线程安全性

一个Dictionary<TKey, TValue>可以支持多个读卡器同时,只要不修改集合。即便如此,枚举集合本质上不是线程安全的程序在枚举与写入发生冲突的罕见情况下访问,则在整个枚举过程中必须锁定集合。允许多个线程访问集合进行读取在编写时,您必须实现自己的同步。

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

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

您可以在这里阅读有关Dictionary集合的信息MSDN

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

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

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