有人知道我是否需要锁来获取列表中的项目数?
代码行:
System.Web.HttpContext.Current.Application["Name"] as List<Object>
我在列表中添加或删除对象时已经锁定了。
答案 0 :(得分:1)
这实际上取决于“线程安全”的含义。
例如,您是否在特定时间点阅读Count
这一点很重要?例如插入/删除后立即执行,如果没有锁定,则不能安全检查。
鉴于你只是试图拉一个整数值,最糟糕的情况是你拉动它后价值会发生变化(这可能对你很重要,也可能不重要)。我想这归结为数据的“陈旧性”对您的应用程序有多重要,而且这只是开发人员可以决定的事情。
答案 1 :(得分:-2)
根据http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx,List<T>
不是线程安全的:
此类型的公共静态(在Visual Basic中为Shared)成员是线程安全的。不保证任何实例成员都是线程安全的。
对List执行多个读取操作是安全的,但如果在读取时修改了集合,则会出现问题。要确保线程安全,请在读取或写入操作期间锁定集合。 要使多个线程可以访问集合以进行读取和写入,您必须实现自己的同步。对于具有内置同步的集合,请参阅System.Collections.Concurrent命名空间中的类。有关本质上线程安全的替代方法,请参阅ImmutableList类。
因为.Count
是实例成员,所以根据上面的说法,它不是线程安全的。