在多线程应用程序中,我必须实现ConcurrentDictionary< string,Queue< MyClass>> ;;
队列需要是ConcurrentQueue吗?有必要吗?我将在同一个线程中将所有元素出列,所以我认为不是.我对吗?
编辑:我没有提到我在一个不同的线程中排队我在哪里排队所以我认为正确的结构将是
字典<串,ConcurrentQueue< MyClass的>取代.字典键仅在启动时编辑 最佳答案 如果你只改变updateValueFactory委托中的队列传递给对并发字典的AddOrUpdate()调用,那么你保证Queue对象一次只能被一个线程访问,所以是的,在这种情况下你不需要使用ConcurrentQueue
例如,以下代码允许在许多不同的线程中随时调用Enqueue()和Dequeue(),并且会阻止ConcurrentDictionary中的任何单个Queue对象一次被多个线程访问:
private static ConcurrentDictionary<string, Queue<string>> dict;
public static void Main()
{
dict = new ConcurrentDictionary<string, Queue<string>>();
}
// If I do this on one thread...
private static void Enqueue(string key, string value)
{
dict.AddOrUpdate(
key,
k => new Queue<string>(new[] { value }),
(k, q) =>
{
q.Enqueue(value);
return q;
});
}
// And I do this on another thread...
private static string Dequeue(string key)
{
string result = null;
dict.AddOrUpdate(
"key",
k => new Queue<string>(),
(k, q) =>
{
result = q.Dequeue();
return q;
});
return result;
}