EnthältSchlüsselsicher

8

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

    
MBeckius 02.04.2009, 17:14
quelle

5 Antworten

14

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.

    
Michael 02.04.2009, 17:17
quelle
5

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.

    
jsw 02.04.2009 17:33
quelle
1

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.

    
BFree 02.04.2009 17:19
quelle
1

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.

    
bruno conde 02.04.2009 17:38
quelle
1

Ich glaube, es ist nicht threadsicher,

Ich würde vorschlagen, durch den folgenden Link zu gehen, es zeigt die Implementierung des Thread-Safe-Wörterbuch, oder es ist besser, Ihre eigene Synchronisation zu entwickeln.

Ссылка

    
Mutant 02.04.2009 17:40
quelle

Tags und Links