Beh*_*joo 10 c# multithreading thread-safety
我打算在多个线程之间共享一个List.该列表将在更改期间锁定,这种更改很少发生.如果同时通过列表从不同的线程进行多次迭代,是否存在线程安全问题?
And*_*are 12
如果可以(如果可以使用.NET 4),请使用BlockingCollection<T>
:
为实现的线程安全集合提供阻塞和绑定功能
IProducerConsumerCollection<T>
.
如果没有,则完全封装列表并添加访问该List<T>'s
状态的线程安全方法.不要将列表的引用设置为public或从任何方法返回它 - 始终封装引用,以便您可以保证锁定对它的所有访问.
List<T>
通常不是线程安全的。拥有多个阅读器不会导致任何问题,但是,您无法在读取列表时对其进行写入。因此,您需要锁定读取和写入或使用类似 a System.Threading.ReaderWriterLock
(允许多个读取器但只允许一个写入器)之类的东西。