问题标签 [concurrentdictionary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
71338 浏览

.net - .NET - 字典锁定与 ConcurrentDictionary

我找不到关于ConcurrentDictionary类型的足够信息,所以我想我会在这里问一下。

目前,我使用 aDictionary来保存由多个线程(来自线程池,因此没有确切数量的线程)不断访问的所有用户,并且它具有同步访问。

最近发现 .NET 4.0 中有一组线程安全的集合,看起来很讨人喜欢。我想知道,“更高效、更容易管理”的选项是什么,因为我可以选择拥有一个正常Dictionary的同步访问,或者拥有一个ConcurrentDictionary已经是线程安全的。

参考 .NET 4.0ConcurrentDictionary

0 投票
4 回答
29603 浏览

c# - 如何将 ConcurrentDictionary 转换为 Dictionary?

我有一个要设置为 Dictionary 对象的 ConcurrentDictionary 对象。

不允许在它们之间进行投射。那么我该怎么做呢?

0 投票
3 回答
2939 浏览

c# - 多线程访问非静态类的静态对象

默认情况下,非静态方法在通过多个线程访问时为每个线程都有自己的变量实例,因此如果它们不包含公共变量等,则使它们成为线程安全的。

另一方面,静态方法中的变量在线程之间共享,默认情况下它们是非线程安全的。

说,我有一个类,没有任何静态变量或方法。

但后来我从这个类创建了一个静态对象。

然后,使用多个线程访问 objProfile。

问题是,Profile 类 AddToCache、RemoveFromCache 和 DoSomethingThatShouldBeThreadSafe 的方法在通过 objProfile 使用时是否是线程安全的?它们的变量是否将在线程之间共享,即使它们不是静态的,因为类的整个实例是静态的?

0 投票
1 回答
406 浏览

c# - ConcurrentDictionary 和不相交的键集

有3个线程。它们中的每一个都使用自己的一组字典键工作(读取、写入)。所以键对于不同的线程是互斥的。还有多个线程只读取数据。

这两种方法中哪一种在速度方面更有效:

  1. 创建单个字典(ConcurrentDictionary 类型)
  2. 为这 3 个线程中的每一个创建一个单独的字典(ConcurrentDictionary 类型)。

乍一看,第二种方法更有效,因为没有作家争用。这里有什么陷阱吗?如果两种方法之间的差异微不足道,那么我将采用第一种方法。

0 投票
1 回答
609 浏览

c# - select from Dictionary 会找到值,但 select from ConcurrentDictionary 不会

今天我用 ConcurrentDictionary 和 Dictionary 做了一些测试:

使用上面的实体,我创建并填充了 ConcurrentDictionary 和 Dictionary 并尝试了以下代码:

第一个返回值,但第二个没有,我做错了什么?

这是用于添加值的代码:

0 投票
2 回答
1280 浏览

c# - ConcurrentDictionary - 损坏的字典或错误的代码?

好吧,所以我遇到了一个奇怪的小问题,坦率地说我没有想法。我想把它扔出去,看看我是否遗漏了我做错的事情,或者 ConcurrentDictionary 是否工作不正常。这是代码:

(Cache 是一个包含静态 ConcurrentDictionary Keys 的类)

问题是偶尔tmpnull导致TryRemove线路运行,但return null;上面的线路从未被击中。既然这return null是唯一放入null字典的东西,而且它永远不会运行,那怎么可能tmpnull


包括 Cache 类(此代码不使用 SetNames):

0 投票
1 回答
2021 浏览

c# - Reactive Extensions .NET 3.5 中的 ConcurrentDictionary 在哪里

我的问题很简单。经过大量的谷歌搜索后,我了解到我可以在.NET 3.5项目中使用ConcurrentDictionary ,使用其安装目录中的Reactive ExtensionsSystem.Threading.dll版本。首先,没有 System.Threading.dll,Reactive Extensions .NET 3.5 子目录中只有 System.Reactive.Windows.Threading。添加对 System.Reactive 或 System.Reactive.Windows.Threading 或提到的 .NET 3.5 中的任何其他的引用不会给我 ConcurrentDictionary 类,也不会给我 System.Collections.Concurrent 命名空间。我已经下载了旧版本的 Reactive Extensions SDK 并且我找到了我一直在寻找的东西,但我的问题是:有人知道在 Reactive Extensions 的实际版本中 ConcurrentDictionary backport 发生了什么,有人知道它在哪里或为什么失踪。我无法找到合理的答案或任何答案。

0 投票
2 回答
5671 浏览

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

在将值导出到列表 ex 并清除该字典之后,使 ConcurrentDictionary 成为线程安全的任何想法。这样任何其他线程都无法在导出和清除之间添加数据。

像这样: ”

" 并且添加是由其他线程使用函数 _changedItems.AddOrUpdate 完成的

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

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

需要一个清除函数来安全地从字典中返回所有已清除的项目。

-拉里

0 投票
1 回答
77 浏览

visibility - 并发字典和可见性

我读过 ConcurrentDictionary 仅在写入时锁定,因此读取是无锁的。

http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx 以无锁方式读取字典

但是可见性呢,当读取是无锁的时,他们如何确保这一点?

0 投票
2 回答
2944 浏览

c# - ConcurrentDictionary AddOrUpdate by predicate

我有一个ConcurrentDictionary. 我使用它的AddOrUpdate方法来操作它的项目。

我的问题是:是否可以使用AddOrUpdate's update 参数来包含 if 语句?例如 myConcurrentDictionary包含具有字符串 Id 和 DateTime 日期属性的对象。

我想 - 添加一个新对象,如果具有给定 Id 的对象不存在 - 更新它,如果新对象的日期等于或大于现有的,如果小于,则不做任何事情。

在我的例子中:

我应该改变