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

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相关问答推荐

如何在AutoMapper中添加自定义方法到项目中?

如何按需计算一个值并将该值缓存在FP/F#中?

使用CLR将数据从Excel导入SQL Server时出错

PowerShell - 如果用户输入凭据,则查询 AD 时出错

单击关闭按钮时隐藏表单而不是关闭

代理、包装器或外观类之间有什么区别

在一个 LINQ 查询中获取两列的总和

如何在 C# 中创建 Word 文档?

使用只读属性或方法?

C# 中的 myCustomer.GetType() 和 typeof(Customer) 有什么区别?

从 List 到数组 T[] 的转换

监听依赖属性的变化

仅使用 XAML 绘制纯色三角形

ReaderWriterLockSlim 什么时候比简单的锁更好?

C# (.NET) 设计缺陷

实体框架中的 POCO 是什么?

Microsoft.Bcl.Build NuGet 包有什么作用?

DateTime.Compare 如何判断日期是否小于 30 天?

使用 C# 将时间跨度值转换为格式hh:mm Am/Pm

模拟和单元测试需要时如何抛出 SqlException?