Mam wiele kolejek, do których dostęp ma wiele wątków. Aby osiągnąć wątku bezpieczeństwa, zrobiłem co następuje:Czy mogę używać elementów słownika jako obiektów blokujących?
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;
}
mogę również zablokować MyQueues
, ale potem chciałbym zablokować więcej niż to konieczne. Moje pytanie brzmi, czy blokowanie obiektu zawartego w słowniku będzie działało - zakładając, że wartość klucza (kolejka) nigdy się nie zmieni.
Twoje pytanie brzmi bardziej jak wypowiedź. Jakie jest twoje pytanie? –
Nie blokujesz obiektów, blokujesz * odniesienia do obiektów *. Innymi słowy, zmiana wartości obiektu nie wpływa na blokadę. – Nolonar
@Nolonarnie, blokujesz sam obiekt. Możesz mieć 17 odniesień do tego samego obiektu - oni wszyscy zablokują to samo. –