并发字典正确用法

Jon*_*Jon 77 .net c# concurrency multithreading .net-4.0

我是否正确地认为这是正确使用并发字典

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);
}

//Seperate threads use this to update a value

myDic[InputID] = newLongValue;
Run Code Online (Sandbox Code Playgroud)

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

Ode*_*ded 68

这取决于线程安全的含义.

从MSDN - 如何:从ConcurrentDictionary添加和删除项目:

ConcurrentDictionary<TKey, TValue>适用于多线程场景.您不必在代码中使用锁来添加或删除集合中的项.但是,一个线程始终可以检索一个值,而另一个线程可以通过为相同的键提供一个新值来立即更新该集合.

因此,可以获得字典中项目值的不一致视图.

  • 不认为"线程安全"是一个含糊不清的术语. (10认同)
  • 我认为这不是医生所说的.不一致与视图包含的内容有关,如果视图只是值,那么它是完全一致的.只要获得键的值,字典中的键值就会发生变化.这与DateTime.Now值不一致. (6认同)
  • 那是一个有趣的观点!在那种情况下,您还会使用锁吗? (2认同)
  • @Jon - 这取决于您的应用程序以及您是否可以。但我想说,如果您想要项目的一致视图,则需要将项目的每次读取和更新包装在锁中。 (2认同)