Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 2976|Svar: 2

[Källa] Hur Lazy in C# håller trådarna säkra

[Kopiera länk]
Publicerad på 2023-07-02 21:41:55 | | |
Efter .NET 4.0 tillhandahölls en säker lazy loading-typ i .NET FrameworkLat
Lazy kan arbeta i en multitrådad miljö, garanteratGetValueFunktionen utförs endast en gång, vilket innebär att implementeringen implementerasSingletonläge

Tidigare använde vi kvadratiska bedömningslås för att implementera singleton-mönster, eller för att använda statiska initialiseringsfunktioner för klasser
Med Lazy-typen förenklas denna process och prestandan är bättre

När Lazy skapas kan du ange trådinstallationsläget, det finns för närvarande två lägen,Endast publikationExcutionAndPublication

Publiceringsläge endast


1. Kör initialiseringsfunktionen och rama in den i en internLådatyp, lös problemet med nullvärdesbedömning, om fallet har skapats, kommer det att returnera null,Processen är trådosäker

2. Bestäm om m_boxed är tom, m_boxed är fältet sparat av värdet, om det är lika med tomt sätts det till boxed, denna metod kan säkerställa atomicitet,Processen är trådsäker

3. Om CreateValue returnerar tomt betyder det att andra trådar redan har skapat instanser, och sedan sätter till redan skapade instanser

4. Markera initialiseringsmetoden som initierad, vilket vanligtvis sker vid samtidig körning, och kör CreateValue flera gånger


Endast publikationläge används baserat påInterlocked.CompareExchange, denna klass innehåller atomicitetsmetoderCAS (Jämför och byt)

CAS implementeras med atomära instruktioner som tillhandahålls av CPU:n, och olika runtime-versioner kan ha olika implementationer
Interlockad specifik implementation I den inbyggda metoden kan intresserade vänner kontrollera den specifika implementationen via coreclr/jvm-kod

I detta läge,En singleton-funktion kan köras flera gånger, men i slutändan garanteras att endast en instans erhålls

ExcutionAndPubliceringsläge

ExcutionAndPublicationLäge som används i lägetVolatile+MonitorBildskärmDet är detlåsImplementeringen av satsen, Monitor-implementeringen i den inbyggda koden, är ett tungviktslås

BildskärmKö- och trådvila stöds, vilket kan säkerställa att hela metodblocket körs i ett enkeltrådat tillstånd


Originallänk:Inloggningen med hyperlänken är synlig.




Föregående:ASP.NET skillnaden mellan ThreadStatic, CallContext och HttpContext
Nästa:SQL Server frågar det aktuella antalet anslutningar till databasen
 Hyresvärd| Publicerad på 2023-07-02 21:42:16 |
 Hyresvärd| Publicerad på 2023-07-04 19:19:45 |
C#-prestandaoptimering: Lazy initierar Lazy<T> med en fördröjning
https://www.itsvse.com/thread-7700-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com