Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 2976|Risposta: 2

[Fonte] Come la pigrizia in C# mantiene i thread al sicuro

[Copiato link]
Pubblicato su 02/07/2023 21:41:55 | | |
Dopo .NET 4.0, nel .NET Framework veniva fornito un tipo di caricamento sicuro e pigroPigro
Lazy è in grado di operare in un ambiente multi-thread, garantitoGetValueLa funzione viene eseguita solo una volta, implementando cosìModalità singola

In passato, utilizzavamo blocchi di giudizio quadratico per implementare pattern singleton, o per utilizzare funzioni di inizializzazione statiche delle classi
Con il tipo pigro, questo processo è semplificato e le prestazioni migliorano

Quando viene creato Lazy puoi specificare la modalità di installazione del thread, attualmente ci sono due modalità,Solo pubblicazioneEsposizione e pubblicazione

Modalità Solo pubblicazione


1. Esegui la funzione di inizializzazione e inseriscila in un sistema internoScatolatipi, risolvendo il problema del giudizio di valore nullo, se il caso è stato creato, restituirà nullo,Il processo è insicuro nei thread

2. Determinare se il m_boxed è vuoto, m_boxed è il campo salvato per valore, se è uguale a vuoto, è impostato su scatolato, questo metodo può garantire atomicità,Il processo è sicuro per il filo

3. Se CreateValue restituisce vuoto, significa che altri thread hanno già creato istanze, quindi impostate su istanze già create

4. Segna il metodo di inizializzazione come inizializzato, cosa che di solito avviene nel caso di esecuzione concorrente, ed esegui CreateValue più volte


Solo pubblicazioneLa modalità viene utilizzata in base aInterbloccato.CompareExchange, questa classe contiene metodi di atomicitàCAS (Confronto e scambio)

Il CAS è implementato utilizzando istruzioni atomiche fornite dalla CPU, e diverse versioni di runtime possono avere implementazioni differenti
Implementazione specifica interbloccata Nel metodo nativo, gli amici interessati possono verificare l'implementazione specifica tramite codice coreclr/jvm

In questa modalità,Una funzione singleton può eseguire più volte, ma alla fine è garantito che si otterrà solo un'istanza

Modalità di Esposizione e Pubblicazione

Esposizione e pubblicazionemodalità utilizzata nella modalitàVolatile+MonitorMonitorLo èserraturaL'implementazione dell'istruzione, l'implementazione Monitor nel codice nativo, è un blocco pesante

MonitorSono supportati il sleep di coda e thread, che può garantire che l'intero blocco di metodo venga eseguito in uno stato single-threaded


Link originale:Il login del link ipertestuale è visibile.




Precedente:ASP.NET la differenza tra ThreadStatic, CallContext e HttpContext
Prossimo:SQL Server interroga il numero attuale di connessioni al database
 Padrone di casa| Pubblicato su 02/07/2023 21:42:16 |
 Padrone di casa| Pubblicato su 04/07/2023 19:19:45 |
Ottimizzazione delle prestazioni C#: Lazy inizializza Lazy<T> con un ritardo
https://www.itsvse.com/thread-7700-1-1.html
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com