Ich habe mehrere Warteschlangen, auf die mehrere Threads zugreifen. Um Thread-Sicherheit zu erreichen, habe ich folgendes:Kann ich Wörterbuchelemente als Sperrobjekte verwenden?
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;
}
Ich könnte auch MyQueues
sperren, aber dann würde ich sperren mehr als nötig. Meine Frage ist also, ob das Sperren eines in einem Wörterbuch enthaltenen Objekts funktioniert - vorausgesetzt, der Wert eines Schlüssels (die Warteschlange) wird nie geändert.
Ihre Frage liest sich eher wie eine Aussage. Was ist wieder deine Frage? –
Sie sperren keine Objekte, Sie sperren * Verweise auf Objekte *. Mit anderen Worten, ob sich der Wert des Objekts ändert, hat keinen Einfluss auf die Sperre. – Nolonar
@Nolonar nein, Sie sperren das Objekt selbst. Du könntest 17 Referenzen auf das gleiche Objekt haben - sie würden alle dasselbe sperren. –