是List <t>()。计算线程安全吗?</t>

时间:2014-06-13 13:33:58

标签: c# multithreading list thread-safety

有人知道我是否需要锁来获取列表中的项目数?

代码行:

System.Web.HttpContext.Current.Application["Name"] as List<Object>

我在列表中添加或删除对象时已经锁定了。

2 个答案:

答案 0 :(得分:1)

这实际上取决于“线程安全”的含义。

例如,您是否在特定时间点阅读Count这一点很重要?例如插入/删除后立即执行,如果没有锁定,则不能安全检查。

鉴于你只是试图拉一个整数值,最糟糕的情况是你拉动它后价值会发生变化(这可能对你很重要,也可能不重要)。我想这归结为数据的“陈旧性”对您的应用程序有多重要,而且这只是开发人员可以决定的事情。

答案 1 :(得分:-2)

根据http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspxList<T>不是线程安全的:

  

此类型的公共静态(在Visual Basic中为Shared)成员是线程安全的。不保证任何实例成员都是线程安全的。

     

对List执行多个读取操作是安全的,但如果在读取时修改了集合,则会出现问题。要确保线程安全,请在读取或写入操作期间锁定集合。 要使多个线程可以访问集合以进行读取和写入,您必须实现自己的同步。对于具有内置同步的集合,请参阅System.Collections.Concurrent命名空间中的类。有关本质上线程安全的替代方法,请参阅ImmutableList类。

因为.Count是实例成员,所以根据上面的说法,它不是线程安全的。