并发子结构需要是并发的吗?
本文关键字:并发 结构 | 更新日期: 2023-09-27 18:11:04
在多线程应用程序中,我必须实现ConcurrentDictionary<string,Queue<MyClass>>;
队列需要是ConcurrentQueue
吗?有必要吗?我将把所有元素都放到同一个线程中,所以我认为不是。我说的对吗?编辑:我没有提到我在不同的线程中排队所以我认为正确的结构应该是Dictionary<string,ConcurrentQueue<MyClass>>
。字典键只在启动时编辑
如果您只更改传递给AddOrUpdate()
调用并发字典的updateValueFactory
委托中的队列,那么您可以保证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;
}