C# .Net 4.5多线程共享变量

4
我对多线程不熟悉,在共享对象方面有一个问题。 我在C# .Net 4.5中进行此操作。
我有一个包含名为Price的对象的列表。 Price类包含12个属性,其中一个是datetime类型,其他属性都是double类型。
然后我运行4个任务,它们都引用这个对象列表。 这些任务都不会改变列表对象,它们只是从对象中读取。
因此,这些任务都引用同一个对象但仅从中读取,那么我是否正确地认为我不需要任何锁定呢?

你是对的,读取时不需要锁定。 - Adriano Repetti
与上面的问题类似,您的lambda表达式将被提升到一个编译器生成的类中。 - Liam
2个回答

5

是的,对于这些类型(实际上是大多数类型),读取操作不会修改任何内容,因此是安全的。


这个问题可能已经在这里得到了回答:https://dev59.com/yWw05IYBdhLWcg3w6F4w - Richard Hanley

3
只有当你不在任何其他线程上进行updateadd时,才不需要添加锁定。如果updateedit在任何其他thread上执行,则应考虑使用锁定。
ReaderWriterLockSlim提供了一种简单有效的方式来提供高级ReaderWriter锁。
此外,在文档中的Thread Safety部分中提到,

对于List执行多个读取操作是安全的,但如果在读取时修改集合可能会出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接