c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据

c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据,第1张

概述任何使ConcurrentDictionary线程安全的想法,其中值被导出到列表ex,并在该字典被清除之后.这样任何其他线程都无法在导出和清除之间添加数据. 像这样: “ List<data> list;list = (List<data>)_changedItems.Values; //get values before clearing_changedItems.Clear(); “ 并且 任何使ConcurrentDictionary线程安全的想法,其中值被导出到列表ex,并在该字典被清除之后.这样任何其他线程都无法在导出和清除之间添加数据.

像这样:

List<data> List;List = (List<data>)_changedItems.Values; //get values before clearing_changedItems.Clear();


并且使用函数_changedItems.AddOrUpdate通过其他线程完成添加

现在,如果某个线程在清除行之前将数据对象添加到集合中,则有可能在从字典中获取数据和清除内容之间丢失新数据.

或者是添加和清除内部锁定的唯一方法.

lock(object){    List<data> List;    List = (List<data>)_changedItems.Values;      _changedItems.Clear();}

lock(object)    _changedItems.AddOrUpdate

需要一个Clear-function,可以安全地从字典中返回所有已清除的项目.

-Larry

解决方法 实际上,在序列中调用两个线程安全的方法并不能保证序列本身的原子性.你是正确的,锁定两个调用以获取值和清除是必要的. 总结

以上是内存溢出为你收集整理的c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据全部内容,希望文章能够帮你解决c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1234305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存