Frage

Beim Lesen Msdn Dokumentation Wörterbücher heißt es: „öffentliche statische (Shared in Visual Basic) Member dieses Typs sind threadsicher. bei Instanzmitgliedern garantiert nicht sicher fädeln. "

Diejenigen dies bedeuten, dass mit einem Wörterbuch wie folgt aus:


static object syncObject = new object();
static Dictionary<string,MyObject> mydictionary= new Dictionary<string, MyObject>();

ist so etwas wie der folgende Code überflüssig machen?


lock (syncObject)
{
   context = new TDataContext();
   mydictionary.Add("key", myObject);
}
War es hilfreich?

Lösung

Es wird Bezug auf statische Methoden auf die Klasse selbst. Die Aussage ist eigentlich vorformulierten Dokumentation zu den meisten Klassen hinzugefügt. Die Dictionary <> Klasse eigentlich nicht aussetzen keine statischen Methoden.

Sie haben Zugriff auf Ihre Wörterbuch-Klasse serialisiert sich das Schloss Schlüsselwort oder vielleicht sogar ein ReaderWriterLock. obwohl Threading ist ein ziemlich komplexes Thema und das Schloss Schlüsselwort ist nicht immer angemessen. Es gibt ein großes Buch von Joe Duffy „ Concurrent Programming Windows “ das geht in großen Tiefe über gemeinsam genutzte Anwendungsressourcen zu schützen.

Andere Tipps

Sie sind falsch interpretiert "public static Mitglieder diese Art" als "public static Instanzen diese Art".

Es bedeutet, dass, wenn Sie die Add-Methode (eine Instanz-Methode) nennen würden Sie besser sicherstellen, dass Sie exklusiven Zugriff auf das Wörterbuch haben, indem Sie Ihre eigene Verriegelung oder Serialisierung Semantik. Bad Dinge könnten auftreten, wenn zwei Threads den Zustand Ihrer Wörterbuch zur gleichen Zeit ändern, und es ist dafür verantwortlich, sicherzustellen, dass dies nicht geschieht. Es gibt nichts im Dictionary Add-Methode, die diese Verriegelung für Sie tun.

Wenn Sie jedoch einige statische Methode auf Wörterbuch nennen (von denen es keine nützlichsten) dann würden Sie ohne Schloss in Ordnung sein.

Dies ist die allgemeine Regel für alle .NET-Typen in der BCL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top