从List获取元素的元素是否安全?
var list = new List<int>();
...
var a = list[i]; //executed from multiple threads. Should this be protected?
答案 0 :(得分:5)
绝对是线程安全的...... ...只要你能确保列表没有改变。即使添加项目也会使您进入“未定义”的territoty(尽管取决于实现它可能正常工作)。
所以,只读 - 是的。阅读+操作:不。
注意:只要列表[5]是相同的对象,就可以在lsit中更改项目。该清单并不在意。不是说它会起作用 - 因为取决于你在这里改变的是你与列表中对象的契约。对于int,你显然不应该更新它们。
答案 1 :(得分:1)
这取决于您希望采取的行动。
阅读 - 完全安全。
写/编辑 - 不太安全
分类为Concurrent Collections
的集合很少,这些集合是开箱即用的线程安全。
但是,同步现有的List<T>
而不是使用并发集合更快(在运行时)。