Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 2976|Svar: 2

[Kilde] Hvordan Lazy in C# holder tråde sikre

[Kopier link]
Opslået på 02/07/2023 21.41.55 | | |
Efter .NET 4.0 blev der indført en sikker lazy loading-type i .NET FrameworkDoven
Lazy kan operere i et multitrådet miljø, garanteretGetValueFunktionen udføres kun én gang, hvilket implementererSingleton-tilstand

Tidligere brugte vi kvadratiske vurderingslås til at implementere singleton-mønstre eller til at anvende statiske initialiseringsfunktioner for klasser
Med Lazy-typen er denne proces forenklet, og ydeevnen er bedre

Når Lazy oprettes, kan du angive trådinstallationstilstanden, der er i øjeblikket to tilstande,PublikationsOnlyExcutionAndPublication

Publikations-Only-tilstand


1. Kør initialiseringsfunktionen og indkapsl den i en internÆsketype, løs problemet med nulværdidom, hvis tilfældet er oprettet, vil det returnere null,Processen er trådusikker

2. Bestem om m_boxed er tom, m_boxed er feltet gemt af værdien, hvis det er lig tomt, sættes det til bokset, denne metode kan sikre atomicitet,Processen er trådsikker

3. Hvis CreateValue returnerer tom, betyder det, at andre tråde allerede har oprettet instanser, og derefter sættes til allerede oprettede instanser

4. Markér initialiseringsmetoden som initialiseret, hvilket normalt sker i tilfælde af samtidig kørsel, og kør CreateValue flere gange


PublikationsOnlyMode bruges baseret påInterlocked.CompareExchange, indeholder denne klasse atomicitetsmetoderCAS (Sammenlign og Byt)

CAS implementeres ved hjælp af atomare instruktioner, som CPU'en leverer, og forskellige runtime-versioner kan have forskellige implementeringer
Sammenkoblede specifikke implementeringer I den native metode kan interesserede venner tjekke den specifikke implementering gennem coreclr/jvm-kode

I denne tilstand,En singleton-funktion kan køre flere gange, men i sidste ende er det garanteret, at kun én instans opnås

ExcutionAndPublication-tilstand

ExcutionAndPublicationTilstand brugt i tilstandenVolatile+MonitorSkærmDet er detlåsImplementeringen af sætningen, Monitor-implementeringen i den oprindelige kode, er en tungvægtslås

SkærmKø- og trådsøvn understøttes, hvilket kan sikre, at hele metodeblokken udføres i en enkelttrådet tilstand


Originalt link:Hyperlink-login er synlig.




Tidligere:ASP.NET forskellen mellem ThreadStatic, CallContext og HttpContext
Næste:SQL Server forespørger det aktuelle antal forbindelser til databasen
 Udlejer| Opslået på 02/07/2023 21.42.16 |
 Udlejer| Opslået på 04/07/2023 19.19.45 |
C# ydelsesoptimering: Lazy initialiserer Lazy<T> med en forsinkelse
https://www.itsvse.com/thread-7700-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com