Ho più code a cui si accede da più thread. Per raggiungere thread-safety, ho fatto quanto segue:Posso usare gli elementi del dizionario come oggetti di blocco?
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;
}
ho potuto anche bloccare MyQueues
, ma poi avrei bloccare più del necessario. Quindi la mia domanda è, se il blocco di un oggetto contenuto in un dizionario funziona, supponendo che il valore di una chiave (la coda) non venga mai modificato.
La tua domanda si legge più come una dichiarazione. Qual è la tua domanda di nuovo? –
Non blocchi gli oggetti, blocchi * i riferimenti agli oggetti *. Quindi, in altre parole, se il valore dell'oggetto cambia non influenza la serratura. – Nolonar
@Nononar no, si blocca l'oggetto stesso. Potresti avere 17 riferimenti allo stesso oggetto: bloccerebbero tutti la stessa cosa. –