c#中列表的并发访问

时间:2018-05-05 05:39:42

标签: c# concurrency

如果一个线程正在C#中的List中添加一个对象而其他线程正在修改列表中对象的属性则是否存在冲突的可能性或者C#List已经在List中实现了避免这种冲突情况的机制发生。

4 个答案:

答案 0 :(得分:2)

在并发线程中操作从列表引用的对象可能会导致对象中有关对象状态的冲突 操作列表中的项目可能会导致集合中发生冲突,因为许多事情都会在后台发生,例如在添加新项目时重新分配缓冲区或复制元素。
你必须要照顾两者 对于定位.Net 4的列表,您可以使用System.Collections.Concurrent命名空间。

答案 1 :(得分:1)

具体实施可以更好地回答您的问题,但也许这就足够了。 C#中的列表不是线程安全的。如果您正在寻找线程安全集合,请查看此文档Thread-Safe Collections

答案 2 :(得分:1)

通常没有内置保护。有一些线程安全的集合(例如参见https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent?view=netframework-4.7.2),原始集合具有可以使用的Synchronized属性,但默认情况下集合不是线程安全的。

答案 3 :(得分:1)

C#列表不是线程安全的。

.NET Framework 4在System.Collections.Concurrent命名空间中引入了线程安全的集合。

您可以使用ConcurrentBag<T>代替List<T>