Ich plane, die Liste einmal in einem statischen Konstruktor zu erstellen und dann mehrere Instanzen dieser Klasse gleichzeitig zu lesen (und aufzuzählen), ohne eine Sperre durchzuführen.Threadsicherheit der C# -Liste <T> für Leser
In diesem Artikel http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx MS beschreibt die Probleme, die Sicherheit der Faden wie folgt:
öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Alle Instanzmitglieder sind nicht garantiert Thread sicher sein.
Eine Liste kann mehrere Leser gleichzeitig unterstützen, solange die Sammlung nicht geändert wird. Aufzählung durch eine Sammlung ist intrinsisch kein Thread-sicheres Verfahren. In dem seltenen Fall, in dem eine Enumeration mit einem oder mehreren Schreibzugriffen konkurriert, ist die einzige Möglichkeit, Thread-Sicherheit sicherzustellen, die Sammlung während der gesamten Enumeration zu sperren. Damit die Sammlung auf mehrere Threads für Lesen und Schreiben zugreifen kann, müssen Sie Ihre eigene Synchronisierung implementieren.
Die "Aufzählung durch eine Sammlung ist an sich kein Thread-sicheres Verfahren." Statement macht mir Sorgen.
Bedeutet dies, dass es threadsicher für nur Leser-Szenario ist, aber solange Sie keine Aufzählung verwenden?
Oder ist es sicher für mein Szenario?
Danke für die Antworten. Warum muss ich AsReadOnly überhaupt verwenden, wenn es mit oder ohne es funktioniert?
Mit 'IEnumerators nicht über Threads teilen 'meinst du' nicht Zugriff ** auf die gleiche Enumerator-Instanz ** von mehreren Threads'? –
@EugeneBeresovksy: Genau. – SLaks