在多线程方案中使用以下模式是否安全:

var collecation = new List<T>(sharedCollection);

哪里sharedCollection可以被另一个线程同时修改(即添加或删除了元素)?

我当前正在处理的场景是从BindingList复制项目,但是问题应该与任何标准集合类型有关。

如果不是线程安全的,我应该锁定sharedCollection还是有更好的解决方案?

最佳答案

您似乎已经回答了自己的问题。不,将更改列表复制到另一个列表不是线程安全的,是的,您可以锁定sharedCollection。请注意,仅在复制时锁定sharedCollection是不够的。您需要在阅读或更改其内容时随时锁定它。

编辑:仅在何时需要锁定要修改的对象时提供注释-如果可以更改对象引用本身(例如`sharedCollection = new List),或者可以将其设置为null,则创建一个单独的对象进行锁定作为正在进行读/写的类(class)成员。

关于c# - 列表复制线程安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24172232/

10-09 03:11