Ale*_*ope 5 .net c# multithreading thread-safety
在多线程场景中使用以下模式是否安全:
var collecation = new List<T>(sharedCollection);
Run Code Online (Sandbox Code Playgroud)
哪里sharedCollection可以同时被另一个线程修改(即添加或删除元素)?
我目前正在处理的场景是从 BindingList 复制项目,但问题应该与任何标准集合类型相关。
如果它不是线程安全的,我应该锁定sharedCollection,还是有更好的解决方案?
您似乎已经回答了自己的问题。不,将更改列表复制到另一个列表不是线程安全的,是的,您可以锁定sharedCollection. sharedCollection请注意,复制时仅锁定是不够的;当您阅读或更改其内容时,您也需要将其锁定。
编辑:只是注意一下何时锁定正在修改的对象是不好的——如果对象引用本身可以更改(如`sharedCollection = new List)或者如果它可以为空,则创建一个单独的对象来锁定作为正在进行阅读/写作的班级的成员。