Wenn Sie können (wenn Sie .NET 4 verwenden können), verwenden Sie BlockingCollection<T>
:
Bietet Blockierungs- und Begrenzungsfunktionen für threadsichere Sammlungen, die
IProducerConsumerCollection<T>
implementieren.
Wenn nicht, dann kapseln Sie die Liste vollständig ein und fügen Sie thread-sichere Methoden hinzu, die auf den List<T>'s
-Zustand zugreifen. Machen Sie den Verweis auf die Liste nicht öffentlich oder geben Sie ihn nicht aus anderen Methoden zurück - kapseln Sie den Verweis immer ein, damit Sie sicherstellen können, dass Sie alle Zugriffe darauf sperren.
Ein List<T>
ist keine Thread-sichere Klasse, aber wenn Sie jedes Mal sperren lesen / schreiben, es wird keine Probleme geben. Laut der Dokumentation:
Öffentlich statisch (in Visual Basic freigegeben) Mitglieder dieses Typs sind Thread-sicher. Alle Instanzmitglieder sind es nicht garantiert fadensicher.
A
List<T>
kann mehrere Leser unterstützen gleichzeitig, solange die Sammlung wird nicht geändert. Aufzählung durch eine Sammlung ist Eigentlich kein Thread-Safe Verfahren. In dem seltenen Fall, wo ein Aufzählung streitet mit einem oder mehreren Schreibzugriffe, der einzige Weg, um sicherzustellen Fadensicherheit ist das zu sperren Sammlung während des gesamten Aufzählung. Um die Sammlung zu ermöglichen Zugriff auf mehrere Threads für Lesen und Schreiben, du musst Implementieren Sie Ihre eigene Synchronisation.
List<T>
ist im Allgemeinen nicht Thread-sicher. Wenn mehrere Reader vorhanden sind, treten keine Probleme auf. Sie können jedoch nicht in die Liste schreiben, während sie gelesen wird. Sie müssten also sowohl lesen als auch schreiben oder etwas wie System.Threading.ReaderWriterLock
verwenden (das mehrere Leser, aber nur einen Schreiber erlaubt).
Tags und Links c# multithreading thread-safety