我计划在静态构造函数中创建一次列表,然后让该类的多个实例同时读取它(并通过它枚举)而不做任何锁定。
在这篇文章 http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx 中,MS 描述了线程安全问题如下:
此类型的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的。不保证任何实例成员都是线程安全的。
只要集合没有被修改,一个 List 可以同时支持多个读取器。通过集合进行枚举本质上不是线程安全的过程。在枚举与一个或多个写访问竞争的极少数情况下,确保线程安全的唯一方法是在整个枚举期间锁定集合。要允许集合被多个线程访问以进行读写,您必须实现自己的同步。
“通过集合枚举本质上不是线程安全的过程。” 声明是我担心的。
这是否意味着它对读者来说是线程安全的,但只要你不使用枚举?
或者对我的场景安全吗?
感谢您的回答。如果它可以使用或不使用它,为什么我需要使用 AsReadOnly?