可以通过多个线程访问List 吗?

我打算在多个线程之间共享一个List。 该列表将在更改期间锁定,这种更改很少发生。 如果同时通过列表从不同的线程进行多次迭代,是否存在线程安全问题?

如果可以(如果可以使用.NET 4),请使用BlockingCollection

为实现IProducerConsumerCollection线程安全集合提供阻塞和IProducerConsumerCollection

如果没有,则完全封装列表并添加访问List's状态的线程安全方法。 不要将列表的引用设置为public或从任何方法返回它 – 始终封装引用,以便您可以保证锁定对它的所有访问。

List不是一个线程安全的类,但如果每次读/写时都锁定,那么就不会有任何问题。 根据文件:

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

List可以同时支持多个读者,只要不修改集合即可。 枚举集合本质上不是线程安全的过程。 在枚举与一个或多个写访问争用的极少数情况下,确保线程安全的唯一方法是在整个枚举期间锁定集合。 要允许多个线程访问集合以进行读取和写入,您必须实现自己的同步。

List通常不是线程安全的。 拥有多个阅读器不会导致任何问题,但是,在阅读时您无法写入列表。 因此,您需要锁定读取和写入,或使用类似System.Threading.ReaderWriterLock (允许多个读取器但只允许一个编写器)。

它可以同时从多个线程中读取 ,如果这就是您所要求的。 如果是这样,请考虑读写器锁。