我有多个队列正在被多个线程访问。为了实现线程安全,我做了以下事情:
private static Dictionary<string, Queue<string>> MyQueues = new Dictionary<string, Queue<string>>();
public static string GetNextQueueElementForKey(string key)
{
string res = string.Empty;
if (MyQueues.Keys.Contains(key))
{
Queue<string> queue = MyQueues[key];
lock (queue)
{
if (queue.Count() > 0)
{
res = queue.Dequeue();
}
}
}
return res;
}
我也可以 lock MyQueues
,但我会锁定超过必要的。所以我的问题是,如果锁定字典中包含的对象会起作用 - 假设键的值(队列)永远不会改变。