我认为这是并发字典的正确用法,对吗

private ConcurrentDictionary<int,long> myDic = new ConcurrentDictionary<int,long>();

//Main thread at program startup

for(int i = 0; i < 4; i++)
{
  myDic.Add(i, 0);
}

//Separate threads use this to update a value

myDic[InputID] = newLongValue;

我没有锁等,只是更新字典中的值,即使多个线程可能会try 做同样的事情.

推荐答案

这取决于你所说的线程安全.

从MSDN-How to: Add and Remove Items from a ConcurrentDictionary:

ConcurrentDictionary<TKey, TValue>是为多线程场景设计的.您不必在代码中使用锁来添加或删除集合中的项目.然而,一个线程总是可以检索一个值,而另一个线程通过给同一个键一个新值来立即更新集合.

因此,可能会得到字典中某项值的不一致的view.

.net相关问答推荐

Azure Function应用程序-如何升级.NET运行时

如何查询 DOTNET_CLI_TELEMETRY_OPTOUT 是否永久设置为 TRUE?

如果只有一个 : 存在于字符串中,则提取冒号后的内容

为什么这两个比较有不同的结果?

Gacutil.exe 成功添加程序集,但在资源管理器中无法查看程序集.为什么?

将 BitmapImage 转换为 Bitmap,反之亦然

您是否使用 TestInitialize 或测试类构造函数来准备每个测试?为什么?

发布版本中的 Debug.WriteLine

如何从 .net 中的数组类型获取数组项类型

获取 .NET Framework 目录路径

[DllImport("QCall")] 是什么?

如何将 UI Dispatcher 传递给 ViewModel

InternalsVisibleTo 属性不起作用

没有 @Html.Button !

什么是 C# 中的自动属性,它们的用途是什么?

在生产环境中部署调试符号(pdb 文件)有什么风险?

如何获得 Bin 路径?

如何判断对象是否已在 C# 中释放

/langversion 的错误选项6无效;必须是 ISO-1、ISO-2、3、4、5 或默认值

在foreach循环中修改列表的最佳方法是什么?