我打算在静态构造函数中创建一次列表,然后让该类的多个实例同时读取(并枚举)它,而不进行任何锁定。C#列表的线程安全<T>读者
在这篇文章中 http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx MS介绍线程安全的问题如下:
公共静态(在Visual Basic中的Shared)这种类型的 成员都是线程安全的。 任何实例成员不是 保证是线程安全的。
只要 集合未被修改,列表可同时支持多个阅读器 。枚举集合 本质上不是线程安全的 过程。在枚举的 与一个或多个 写入访问竞争的罕见情况下,确保 线程安全的唯一方法是在整个枚举中锁定 集合。要允许 由多个线程访问 读取和写入,您必须执行您自己的同步 。
The “通过集合枚举本质上不是线程安全的过程。” 声明是我担心的。
这是否意味着它是线程安全的读者唯一的情况下,但只要你不使用枚举?
或者对我的情况安全吗?
感谢您的回答。 为什么我需要使用AsReadOnly,如果它可以使用或不使用它?
通过'不要共享IEnumerators跨线程'你的意思是'不从多个线程访问**相同的枚举器实例**? – 2014-07-08 07:25:32
@EugeneBeresovksy:的确如此。 – SLaks 2014-07-08 13:57:35