在多线程方案中使用以下模式是否安全:
var collecation = new List<T>(sharedCollection);
哪里
sharedCollection
可以被另一个线程同时修改(即添加或删除了元素)?我当前正在处理的场景是从BindingList复制项目,但是问题应该与任何标准集合类型有关。
如果不是线程安全的,我应该锁定
sharedCollection
还是有更好的解决方案? 最佳答案
您似乎已经回答了自己的问题。不,将更改列表复制到另一个列表不是线程安全的,是的,您可以锁定sharedCollection
。请注意,仅在复制时锁定sharedCollection
是不够的。您需要在阅读或更改其内容时随时锁定它。
编辑:仅在何时需要锁定要修改的对象时提供注释-如果可以更改对象引用本身(例如`sharedCollection = new List),或者可以将其设置为null,则创建一个单独的对象进行锁定作为正在进行读/写的类(class)成员。
关于c# - 列表复制线程安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24172232/