Im folgenden Code:
%Vor%1) Ist ContainsKey-Thread sicher? IOW, was passiert, wenn diese Methode ausgeführt wird, wenn ein anderer Thread dem Wörterbuch etwas hinzufügt? 2) Gibt es für den ersten Rückgabe-Cache [key] eine Chance, dass ein unkenntlicher Wert zurückgegeben wird?
TIA,
MB
Die inhärente Thread-Sicherheit von ContainsKey spielt keine Rolle, da zwischen ContainsKey & amp; Cache [Schlüssel].
Zum Beispiel:
%Vor%MSDN ist in diesem Punkt ziemlich klar:
Um den Zugriff auf die Sammlung zu ermöglichen durch mehrere Threads zum Lesen und Schreiben, müssen Sie Ihre eigenen implementieren Synchronisierung.
Für weitere Informationen hat JaredPar einen tollen Blogeintrag unter Ссылка zu Thread-sicheren Sammlungen.
Nein, ContainsKey ist nicht Thread-sicher, wenn Sie während des Lesens Werte schreiben.
Ja, es besteht die Möglichkeit, dass Sie ungültige Ergebnisse erhalten - aber Sie werden wahrscheinlich zuerst Ausnahmen sehen.
Sehen Sie sich den ReaderWriterLockSlim für die Sperrung in Situationen wie diesem an - er ist für diese Art von Aufgaben konzipiert.
So steht es in der MSDN-Dokumentation:
Öffentliche statische Member (freigegeben in Visual Basic) dieses Typs sind threadsicher. Alle Instanzmitglieder sind nicht garantiert threadsicher.
Ein Wörterbuch & lt; (von & lt; (TKey, TValue & gt;) & gt;) kann mehrere Leser unterstützen gleichzeitig, solange die Sammlung wird nicht geändert. Sogar so, Aufzählung durch eine Sammlung ist Eigentlich kein Thread-Safe Verfahren. In dem seltenen Fall, wo ein Aufzählung konkurriert mit schreiben Zugriffe, muss die Sammlung sein während der gesamten Aufzählung gesperrt. Um den Zugriff auf die Sammlung zu ermöglichen durch mehrere Threads zum Lesen und Schreiben, müssen Sie Ihre eigenen implementieren Synchronisierung.
Wenn ich das richtig lese, glaube ich nicht, dass es Thread-sicher ist.
Das Wörterbuch ist nicht Thread-sicher .
Wenn Sie das sagen
Was passiert, wenn diese Methode ist? Ausführen, wenn ein anderer Thread ist etwas zum Wörterbuch hinzufügen?
Dann nehme ich an, dass andere Funktionen auch auf cache
zugreifen. Sie müssen die Zugriffe (Lesen und Schreiben) auf cache
synchronisieren. Verwenden Sie Ihr Sperrobjekt in all diesen Operationen.
Tags und Links c# multithreading dictionary