Tôi có nhiều hàng đợi đang được truy cập bởi nhiều luồng. Để đạt được an toàn luồng, tôi đã làm như sau:Tôi có thể sử dụng các phần tử từ điển làm đối tượng khóa không?
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;
}
Tôi cũng có thể khóa MyQueues
, nhưng sau đó tôi sẽ khóa nhiều hơn mức cần thiết. Vì vậy, câu hỏi của tôi là, nếu khóa một đối tượng chứa trong từ điển sẽ hoạt động - giả sử rằng giá trị của một khóa (hàng đợi) không bao giờ thay đổi.
Câu hỏi của bạn đọc giống như một tuyên bố. Câu hỏi của bạn là gì? –
Bạn không khóa các đối tượng, bạn khóa * tham chiếu đến các đối tượng *. Nói cách khác, liệu giá trị của vật thể có thay đổi không ảnh hưởng đến khóa. – Nolonar
@Nolonar no, bạn tự khóa chính mình. Bạn có thể có 17 tài liệu tham khảo cho cùng một đối tượng - tất cả chúng sẽ khóa cùng một thứ. –