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

Ansehen: 2976|Antwort: 2

[Quelle] Wie Lazy in C# Threads sicher hält

[Link kopieren]
Veröffentlicht am 02.07.2023 21:41:55 | | |
Nach .NET 4.0 wurde im .NET Framework ein sicherer, lazy loading Typ bereitgestelltFaul
Lazy kann garantiert in einer Multithread-Umgebung arbeitenGetValueDie Funktion wird nur einmal ausgeführt und implementiert somitSingleton-Modus

Früher verwendeten wir quadratische Judgment-Locks, um Singleton-Muster zu implementieren oder um statische Initialisierungsfunktionen von Klassen zu nutzen
Beim Lazy-Typ wird dieser Prozess vereinfacht und die Leistung verbessert

Wenn Lazy erstellt wird, kannst du den Thread-Installationsmodus angeben, es gibt derzeit zwei Modi,Veröffentlichung NurExcutionAndPublication

Veröffentlichungsmodus


1. Führe die Initialisierungsfunktion aus und boxe sie in eine interneSchachtelTyp, das Problem des Nullwerturteils löst, wenn der Fall erstellt wurde, wird er null zurückgeben,Der Prozess ist thread-unsicher

2. Bestimmen Sie, ob das m_boxed leer ist, m_boxed das durch den Wert gespeicherte Feld ist, wenn es gleich leer ist, wird es auf geboxt gesetzt, diese Methode kann die Atomizität sicherstellen,Der Prozess ist gefädensicher

3. Wenn CreateValue leer zurückkehrt, bedeutet das, dass andere Threads bereits Instanzen erstellt haben und dann auf bereits erstellte Instanzen gesetzt werden

4. Markiere die Initialisierungsmethode als initialisiert, was normalerweise im Falle eines gleichzeitigen Laufs der Fall ist, und führe CreateValue mehrfach aus


Veröffentlichung NurDer Modus basiert aufInterlocked.CompareExchange, diese Klasse enthält AtomaritätsmethodenCAS (Vergleichen und Tauschen)

CAS wird mit atomaren Anweisungen implementiert, die von der CPU bereitgestellt werden, und verschiedene Laufzeitversionen können unterschiedliche Implementierungen haben
Interlocked-spezifische Implementierung In der nativen Methode können interessierte Freunde die spezifische Implementierung über coreclr/jvm-Code überprüfen

In diesem Modus,Eine Singleton-Funktion kann mehrfach ausgeführt werden, aber letztlich ist garantiert, dass nur eine Instanz erhalten wird

ExcutionAndPublication-Modus

ExcutionAndPublicationIm Modus verwendeter ModusVolatile+MonitorMonitorEs istSchleuseDie Implementierung der Anweisung, die Monitor-Implementierung im nativen Code, ist ein schwergewichtiger Lock

MonitorWarteschlangen- und Thread-Schlaf werden unterstützt, was sicherstellen kann, dass der gesamte Methodenblock in einem Single-Thread-Zustand ausgeführt wird


Originallink:Der Hyperlink-Login ist sichtbar.




Vorhergehend:ASP.NET der Unterschied zwischen ThreadStatic, CallContext und HttpContext
Nächster:SQL Server fragt die aktuelle Anzahl der Verbindungen zur Datenbank ab
 Vermieter| Veröffentlicht am 02.07.2023 21:42:16 |
 Vermieter| Veröffentlicht am 04.07.2023 19:19:45 |
C#-Performance-Optimierung: Lazy initialisiert Lazy<T> mit einer Verzögerung
https://www.itsvse.com/thread-7700-1-1.html
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