C#学习教程:在System.Collections.Concurrent.ConcurrentDictionary中防御竞争条件分享


在System.Collections.Concurrent.ConcurrentDictionary中防御竞争条件

.NET ConcurrentDictionary容易受到可能导致意外数据的竞争条件的影响,如本MSDN文章底部所述。 我假设有几个因素需要考虑。

问:我应该如何编写不易受可能导致数据丢失的竞争条件的代码?

在我的场景中,我有一个输入流,它具有一个不断增加的索引(n ++)。 我的想法是,如果竞争条件发生,我可以检测到丢失的数据并重新发送。 另一方面,可能有更好的方法来做到这一点,我不知道。

人们必须意识到并发集合(不限于.net)存在一个普遍的缺陷,即单个操作可能是线程安全的,但操作序列不是primefaces的 。 我的意思是:假设这个场景,我有一个带有CheckAdd操作的并发集合,两者都是primefaces的。

我想要做的是检查是否存在值,如果不存在,请添加它。 所以我可以这样写:

 if(!collection.Check(value)) { collection.Add(value); } 

尽管两个操作都是primefaces操作,但上述顺序不是,因为线程可能在检查和另一个线程的添加之间中断,这导致不一致的结果。 因此,整个序列应该通过将其包装在例如lock语句中而成为primefaces序列。

上述就是C#学习教程:在System.Collections.Concurrent.ConcurrentDictionary中防御竞争条件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 lock(locker) { if(!collection.Check(value)) { collection.Add(value); } } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/960003.html

发表评论

邮箱地址不会被公开。 必填项已用*标注