Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 2976|Svare: 2

[Kilde] Hvordan Lazy in C# holder trådene trygge

[Kopier lenke]
Publisert på 02.07.2023 21:41:55 | | |
Etter .NET 4.0 ble en sikker lazy loading-type gitt i .NET FrameworkLat
Lazy kan operere i et flertrådet miljø, garantertGetValueFunksjonen utføres kun én gang, og implementeres dermedSingleton-modus

Tidligere brukte vi kvadratiske vurderingslås for å implementere singleton-mønstre, eller for å bruke statiske initialiseringsfunksjoner for klasser
Med Lazy-typen blir denne prosessen forenklet og ytelsen bedre

Når Lazy opprettes, kan du spesifisere trådinstallasjonsmodus, det finnes for øyeblikket to moduser,Kun publikasjonEksklusjonogpublisering

Kun publikasjon-modus


1. Kjør initialiseringsfunksjonen og boks den inn i en internEsketype, løs problemet med nullverdivurdering, hvis tilfellet er opprettet, vil det returnere null,Prosessen er trådusikker

2. Bestem om m_boxed er tom, m_boxed er feltet lagret av verdi, hvis det er lik tomt, settes det til bokset, denne metoden kan sikre atomisitet,Prosessen er trådsikker

3. Hvis CreateValue returnerer tomt, betyr det at andre tråder allerede har opprettet instanser, og deretter settes til allerede opprettede instanser

4. Merk initialiseringsmetoden som initialisert, noe som vanligvis skjer ved samtidig kjøring, og kjør CreateValue flere ganger


Kun publikasjonmodus brukes basert påInterlocked.CompareExchange, denne klassen inneholder atomisitetsmetoderCAS (Sammenlign og bytte)

CAS er implementert ved bruk av atomære instruksjoner levert av CPU-en, og ulike kjøretidsversjoner kan ha forskjellige implementasjoner
Interlocked spesifikk implementering I den native metoden kan interesserte venner sjekke den spesifikke implementasjonen gjennom coreclr/jvm-kode

I denne modusen,En singleton-funksjon kan kjøres flere ganger, men til slutt er det garantert at bare én instans vil bli oppnådd

ExcutionAndPubliseringsmodus

EksklusjonogpubliseringModus brukt i modusenVolatile+MonitorMonitorDet er detlåsImplementeringen av setningen, Monitor-implementeringen i den opprinnelige koden, er en tungvektslås

MonitorKø- og trådsøvn støttes, noe som kan sikre at hele metodeblokken kjøres i en enkelttrådet tilstand


Original lenke:Innloggingen med hyperkoblingen er synlig.




Foregående:ASP.NET forskjellen mellom ThreadStatic, CallContext og HttpContext
Neste:SQL Server spør om det nåværende antallet tilkoblinger til databasen
 Vert| Publisert på 02.07.2023 21:42:16 |
 Vert| Publisert på 04.07.2023 19:19:45 |
C# ytelsesoptimalisering: Lazy initialiserer Lazy<T> med forsinkelse
https://www.itsvse.com/thread-7700-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com