从 List 对象中添加和删除项目是否安全?

HOP*_*OPE 2 c# multithreading thread-safety

假设我们有多个线程和一个List负责保存实时数据的公共。我们有一些线程负责将数据添加到列表对象。另一个线程负责从列表对象中获取数据,然后从顶部删除项目。

问题:从 a 的开头删除List并同时在单独的线程中将数据添加到列表的末尾是否安全?List对象是如何实现的?

vas*_*sib 5

文档

这种类型的公共静态成员是线程安全的。不保证任何实例成员都是线程安全的。

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

因此,如果您的集合可以被某些线程修改 - 您需要在写入读取操作上锁定它。

文档还为您提供了另一种解决方案:

有关具有内置同步的集合,请参阅System.Collections.Concurrent命名空间中的类。

例如,像ConcurrentQueue。用于.Enqueue(obj)在队列末尾插入它并TryDequeue(out obj)从队列顶部获取它。