我正在尝试找出 C# 中的并发集合。
ConcurrentBag、ConcurrentDictionary 和 ConcurrentQueue。
多个线程是否可以向其中添加项目EXACTLY同时?还是他们一前一后地等待?
我试图检查他们的源代码,但我真的无法确定。
I see hereC++ 有一个答案,但我想知道 C# 是否也是如此?
将对象添加到集合中并不是一个简单的操作。它是sequence of events.
事件可以是同时发生的,但是当我们谈论事件的序列时,要么是序列overlap,或者他们是脱节。
计算机硬件的设计使得如果两个事件同时发生,结果将始终是as if其中一个发生在另一个之前。原因很简单。假设线程A分配v=3
,并假设线程 B 分配v=5
。如果线程A先执行,则最终结果将是v==5
。如果线程 B 先执行,则最终结果将是v==3
。没有程序员愿意处理第三种可能的结果。到底会是什么?
无论硬件发生什么,当我们谈论events在程序中,我们从不说“同时”。我们相信硬件能够正常工作as if这种可能性并不存在。
当我们谈论重叠的操作序列(例如,将对象添加到某个集合)时,这是一个主要问题。就是这样并发控制就是这样。
如果并发控制做得正确,那么在两个线程各自将一个对象插入到集合中之后,将保证该集合包含这两个对象。如果做得错误,几乎任何事情都有可能发生(包括任何进一步尝试使用该集合都会使程序崩溃的可能性。)
你实际上可以花years研究并发控制的所有不同方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)