c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全
发布时间:2020-12-15 17:23:07 所属栏目:百科 来源:网络整理
导读:任何使ConcurrentDictionary线程安全的想法,其中值被导出到列表ex,并在该字典被清除之后.这样任何其他线程都无法在导出和清除之间添加数据. 像这样: “ Listdata list;list = (Listdata)_changedItems.Values; //get values before clearing_changedItems.C
任何使ConcurrentDictionary线程安全的想法,其中值被导出到列表ex,并在该字典被清除之后.这样任何其他线程都无法在导出和清除之间添加数据.
像这样: List<data> list; list = (List<data>)_changedItems.Values; //get values before clearing _changedItems.Clear(); “ 现在,如果某个线程在清除行之前将数据对象添加到集合中,则有可能在从字典中获取数据和清除内容之间丢失新数据. 或者是添加和清除内部锁定的唯一方法. lock(object) { List<data> list; list = (List<data>)_changedItems.Values; _changedItems.Clear(); } 和 lock(object) _changedItems.AddOrUpdate 需要一个Clear-function,可以安全地从字典中返回所有已清除的项目. -Larry 解决方法
实际上,在序列中调用两个线程安全的方法并不能保证序列本身的原子性.你是正确的,锁定两个调用以获取值和清除是必要的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |