Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 2976|Antwoord: 2

[Bron] Hoe Lazy in C# threads veilig houdt

[Link kopiëren]
Geplaatst op 02-07-2023 21:41:55 | | |
Na .NET 4.0 werd een veilig lazy loading type aangeboden in het .NET FrameworkLui
Lazy kan werken in een multithreaded omgeving, gegarandeerdGetValueDe functie wordt slechts één keer uitgevoerd, waardoor de implementatieSingleton-modus

In het verleden gebruikten we kwadratische oordeelsloten om singleton-patronen te implementeren, of om statische initialisatiefuncties van klassen te gebruiken
Bij het Lazy-type wordt dit proces vereenvoudigd en is de prestatie beter

Wanneer Lazy wordt aangemaakt, kun je de thread-installatiemodus specificeren, er zijn momenteel twee modi,PublicatieAlleenExcutionAndPublication

Publicatiemodus


1. Voer de initialisatiefunctie uit en zet deze in een interneDoostype, los het probleem van nulwaardeoordeel op, als de case is aangemaakt, zal deze null teruggeven,Het proces is thread-onveilig

2. Bepaal of de m_boxed leeg is, m_boxed het veld is dat door de waarde wordt opgeslagen, als het gelijk is aan leeg, wordt het op een box gezet, deze methode kan de atomiciteit garanderen,Het proces is draadveilig

3. Als CreateValue leeg teruggeeft, betekent dit dat andere threads al instanties hebben aangemaakt, waarna ze op reeds gemaakte instanties worden gezet

4. Markeer de initialisatiemethode als geïnitialiseerd, wat meestal gebeurt bij gelijktijdige uitvoering, en voer CreateValue meerdere keren uit


PublicatieAlleenmodus wordt gebruikt op basis vanInterlocked.CompareExchange, bevat deze klasse atomiciteitsmethodenCAS (vergelijken en wisselen)

CAS wordt geïmplementeerd met atomaire instructies die door de CPU worden geleverd, en verschillende runtime-versies kunnen verschillende implementaties hebben
Interlocked specifieke implementatie In de native methode kunnen geïnteresseerde vrienden de specifieke implementatie controleren via coreclr/jvm-code

In deze modus,Een singletonfunctie kan meerdere keren worden uitgevoerd, maar uiteindelijk is gegarandeerd dat er slechts één instantie wordt verkregen

ExcutionAndPublication mode

ExcutionAndPublicationModus gebruikt in de modusVluchtig+MonitorMonitorDat is het welslotDe implementatie van de instructie, de Monitor-implementatie in de native code, is een zware lock

MonitorWachtrij- en threadslaap worden ondersteund, wat ervoor kan zorgen dat het gehele methodeblok in een single-threaded toestand wordt uitgevoerd


Originele link:De hyperlink-login is zichtbaar.




Vorig:ASP.NET het verschil tussen ThreadStatic, CallContext en HttpContext
Volgend:SQL Server zoekt het huidige aantal verbindingen naar de database op
 Huisbaas| Geplaatst op 02-07-2023 21:42:16 |
 Huisbaas| Geplaatst op 04-07-2023 19:19:45 |
C# prestatieoptimalisatie: Lazy initialiseert Lazy<T> met een vertraging
https://www.itsvse.com/thread-7700-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com