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

Vista: 17115|Risposta: 0

[Comunicazione] Spiegazione dettagliata di AutoResetEvent in .net/c#

[Copiato link]
Pubblicato su 20/03/2018 13:19:01 | | |

Concetti legati ai thread
1. Sincronizzazione dei thread
ManualResetEvent
Il metodo Set() imposta lo stato su Signaled
Reset() per impostarlo su nessun segnale
WaitOne() bloccherà finché non avrà segnale, e se c'è un segnale al momento della chiamata di WaitOne, non bloccherà
AutoResetEvent
La differenza rispetto a ManualResetEvent è che AutoResetEvent.WaitOne() cambia automaticamente lo stato dell'oggetto evento, cioè lo stato dell'evento cambia ogni volta che AutoResetEvent.WaitOne() viene eseguito. Segnale - > nessun segnale; Nessun segnale – > ha segnale
example:


  
myResetEven.Set(), che in realtà è equivalente a uno switch, se il metodo set() non viene eseguito, il seguente waitOne() non potrà aspettare la notifica per permetterlo di eseguire, così che l'istruzione dopo waitOne non verrà eseguita.
Metodo del monitor
Il meccanismo Wait() Pulse() viene utilizzato per l'interazione interthread, quando un oggetto emette Monitor.Wait(), il thread che accede all'oggetto rimane in stato di attesa. Finché non riceve un segnale di risveglio. Monitor.Pulse() viene utilizzato per inviare segnali al thread in attesa.
Cioè, nell'area critica tra Monitor.Enter() e Monitor.Exit(), per liberare il blocco sull'oggetto e bloccare il thread corrente, si trova in uno stato di attesa nella coda.

La serratura è diversa da quella di Mutex
Sincronizzazione dei lock tra più thread
Sincronizzazione di più thread tra processi Mutex, o sincronizzazione di più processi
Nella programmazione multithread .Net, le classi AutoResetEvent e ManualResetEvent sono spesso usate, e il loro utilizzo è molto simile, ma ci sono differenze. Il metodo Set mette il segnale nello stato di invio, il metodo Reset mette il segnale nello stato non inviato, e WaitOne aspetta che il segnale venga inviato. Lo stato iniziale del costruttore può essere determinato dal valore del parametro; se è vero, non è bloccante, e falso è lo stato di blocco. Se un thread chiama il metodo WaitOne, il thread riceve il segnale quando è nello stato di send e continua a eseguire verso il basso. La differenza è che dopo la chiamata, AutoResetEvent.WaitOne() permette di entrare solo un thread alla volta, e quando un thread riceve un segnale, AutoResetEvent metterà automaticamente il segnale in stato di nessun invio, e gli altri thread che chiamano WaitOne possono solo continuare ad aspettare. Cioè, AutoResetEvent risveglia solo un thread alla volta; ManualResetEvent può risvegliare più thread, perché quando un thread chiama il metodo ManualResetEvent.Set(), gli altri thread che chiamano WaitOne ricevono il segnale per continuare l'esecuzione, e il ManualResetEvent non imposta automaticamente il segnale per non essere inviato. In altre parole, a meno che il metodo ManualResetEvent.Reset() non venga chiamato manually, il ManualResetEvent rimarrà segnalato e il ManualResetEvent può attivare più thread contemporaneamente per continuare l'esecuzione.




Precedente:strumento di analisi .har e HARViewer
Prossimo:Implementazione di blocco distribuito Zookeeper
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