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

Vista: 30344|Risposta: 2

[Fonte] Sicura filettatura C# con blocco

[Copiato link]
Pubblicato su 13/06/2016 17:26:25 | | |

Se il tuo codice si trova in un processo che ha più thread in esecuzione contemporaneamente, potrebbe essere in esecuzione contemporaneamente. Se il risultato di ogni esecuzione è lo stesso di un singolo thread e i valori delle altre variabili sono gli stessi come previsto, è thread safe.
In altre parole, l'interfaccia fornita da una classe o programma è atomica per i thread o il passaggio tra più thread non porta a ambiguità nel risultato di esecuzione dell'interfaccia, il che significa che non è necessario considerare la sincronizzazione.
I problemi di sicurezza del thread sono causati sia da variabili globali che statiche.
Se ogni thread ha solo operazioni di lettura per variabili globali e statiche, ma nessuna operazione di scrittura, generalmente questa variabile globale è thread-safe; Se più thread eseguono operazioni di lettura e scrittura su una variabile contemporaneamente, generalmente è necessaria la sincronizzazione dei thread, altrimenti potrebbe influire sulla sicurezza dei thread.

Lo scopo del lock è prevenire operazioni concorrenti quando l'esecuzione multithread è attiva, e gli oggetti del tipo di lock di riferimento permettono di operare solo un thread alla volta nella sua area bloccata.

Il lock può bloccare solo una variabile di tipo di riferimento, cioè bloccare un indirizzo




C'è una differenza tra i risultati di esecuzione con e senza bloccaggio:

Dopo il blocco: il valore di i diminuirà uno dopo l'altro, non ci saranno salti, né output ripetuti, fino al valore di 0;

Nessun blocco: il valore in uscita di i salta, decrescente discontinua e può avere anche un'uscita di -1;

Motivo: Dopo aver aggiunto un lock, solo un thread può eseguire il codice nell'area bloccata alla volta, e entrambi i thread vengono eseguiti in ordine, quindi non ci sarà alcun output interrotto.




Precedente:Utente cancellato dal dialogo di salvataggio (MS Visual Database Tools)
Prossimo:Una bella classe DBHelper che esegue stored procedure
Pubblicato su 14/06/2016 10:53:36 |
 Padrone di casa| Pubblicato su 10/02/2022 09:18:58 |
.NET/C# Lock Principle Monitor fornisce una spiegazione approfondita
https://www.itsvse.com/thread-9633-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