多个线程可以同时向并发集合添加项目吗?

2023-12-08

我正在尝试找出 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(使用前将#替换为@)

多个线程可以同时向并发集合添加项目吗? 的相关文章

随机推荐