Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 69126|Antwort: 4

[Quelle] .NET/C# Thread Safety Collection (Zusammenstellung)

[Link kopieren]
Veröffentlicht am 06.06.2017 17:13:53 | | |
Sammlungen, die im .NET Framework 1.0 eingeführt wurden, sind im System.Collections-Namensraum zu finden. Diese Sammlungen, einschließlich der häufig verwendeten ArrayList und Hashtable, bieten eine Art Thread-Sicherheit durch die Synchronized-Eigenschaft, die einen threadsicheren Wrapper zurückgibt, der mit der Sammlung zusammenhängt. Der Wrapper funktioniert, indem er das gesamte Set für jede Hinzufügen- oder Entfernungsoperation sperrt. Daher muss jeder Thread, der auf die Sammlung zugreifen will, warten, bis er an der Reihe ist, um die Sperre zu erwerben. Dies ist nicht skalierbar und führt zu erheblichen Leistungseinbußen für große Sammlungen. Darüber hinaus verhindert dieses Design keinen Streit vollständig. Weitere Informationen finden Sie auf der folgenden Seite auf der MSDN-Website: Synchronisation in generischen Sammlungen

Die im .NET Framework 2.0 eingeführte Collection-Klasse ist im System.Collections.Generic Namensraum zu finden. Zu diesen Sammlungskursen gehören List<T>, Wörterbuch< TKey, TValue> usw. Diese Klassen bieten eine höhere Typsicherheit und Leistung im Vergleich zu .NET Framework 1.0-Klassen. Die Collection-Klasse .NET Framework 2.0 bietet jedoch keine Thread-Synchronisation; Beim Hinzufügen oder Entfernen von Elementen auf mehreren Threads gleichzeitig muss der Benutzercode alle Synchronisationen bereitstellen.

Wir empfehlen die Verwendung gleichzeitiger Sammlungsklassen in .NET Framework 4, da sie nicht nur die Typsicherheit der .NET Framework 2.0-Sammlungsklassen bieten, sondern auch eine effizientere und vollständigere Thread-Sicherheit bieten als die Thread-Sicherheit der .NET Framework 1.0-Sammlung.


Einige gleichzeitige Sammlungstypen verwenden leichte Synchronisationsmechanismen wie SpinLock, SpinWait, SemaphoreSlim und CountdownEvent, die im .NET Framework 4 neu sind. Typischerweise verwenden die oben genannten Synchronisationstypen das "busy spinning" für eine kurze Zeit, bevor der Thread in den eigentlichen Wartezustand versetzt wird. Wenn die Wartezeit sehr kurz erwartet wird, verbraucht der Spin deutlich weniger Rechenressourcen als die Wartezeit, was Kernel-Umwandlungen beinhaltet, die viele Ressourcen beanspruchen. Für Sammlungsklassen, die Rotation verwenden, bedeutet diese Effizienz, dass mehrere Threads in der Lage sind, Elemente sehr schnell hinzuzufügen und zu entfernen. Weitere Informationen zum Limitieren und Blockieren finden Sie bei SpinLock und SpinWait. Die ConcurrentQueue-<T> und ConcurrentStack-Klassen<T> verwenden überhaupt keine Sperren. Stattdessen verlassen sie sich auf Interlock-Operationen zur Gewindesicherheit.

illustrieren

Da gleichzeitige Collection-Klassen ICollection unterstützen, bieten sie Implementierungen für die Eigenschaften IsSynchronized und SyncRoot, auch wenn sie nicht miteinander verwandt sind. IsSynchronized gibt immer false zurück, während SyncRoot immer null ist (nichts in Visual Basic).

Die folgende Tabelle listet die Sammlungstypen im System.Collections.Concurrent Namensraum auf.



Art
Beschreibung
BlockingCollection<T>
Bietet<T> jegliche Art von Drosselung und Blockierung zur Implementierung von IProducerConsumerCollection. Weitere Informationen finden Sie unter BlockingCollection-Übersicht.
ConcurrentDictionary<TKey, TValue>
Key/value ist eine threadsichere Implementierung des Wörterbuchs.
ConcurrentQueue<T>
Thread-Sicherheitsimplementierung der FIFO-Warteschlangen (First in, first out).
ConcurrentStack<T>
Threadsichere Implementierung von LIFO (Last-in, First-Out)-Stacks.
ConcurrentBag<T>
Threadsichere Implementierung einer außerordentlichen Sammlung von Elementen.
IProducerConsumerCollection<T>
Typen müssen implementiert werden inBlockingCollectionSchnittstellen, die in der







Vorhergehend:.net/c# itextsharp zur Generierung von PDF-Code
Nächster:Install-Package: "MvvmLightLibs" hat bereits eine Abhängigkeit für "CommonServiceLocator" definiert...
Veröffentlicht am 08.11.2017 15:24:45 |
Ja, ich habe es gelernt
 Vermieter| Veröffentlicht am 08.02.2021 10:00:41 |
Die Liste ist<T> threadsicher, wenn die Liste während der Iteration überhaupt nicht verändert wird.
 Vermieter| Veröffentlicht am 23.03.2021 11:32:46 |
ConcurrentDictionary unterstützt neue und aktualisierte Updates
https://www.itsvse.com/thread-2955-1-1.html

 Vermieter| Veröffentlicht am 24.06.2023 14:20:57 |
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com