从List获取索引元素是否安全

时间:2014-02-16 16:41:27

标签: c#

从List获取元素的元素是否安全?

var list = new List<int>();
...
var a = list[i]; //executed from multiple threads. Should this be protected?

2 个答案:

答案 0 :(得分:5)

绝对是线程安全的...... ...只要你能确保列表没有改变。即使添加项目也会使您进入“未定义”的territoty(尽管取决于实现它可能正常工作)。

所以,只读 - 是的。阅读+操作:不。

注意:只要列表[5]是相同的对象,就可以在lsit中更改项目。该清单并不在意。不是说它会起作用 - 因为取决于你在这里改变的是你与列表中对象的契约。对于int,你显然不应该更新它们。

答案 1 :(得分:1)

这取决于您希望采取的行动。

阅读 - 完全安全。

写/编辑 - 不太安全

分类为Concurrent Collections的集合很少,这些集合是开箱即用的线程安全。

但是,同步现有的List<T>而不是使用并发集合更快(在运行时)。