Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 17115|Répondre: 0

[Communication] Explication détaillée d’AutoResetEvent en .net/c#

[Copié le lien]
Publié sur 20/03/2018 13:19:01 | | |

Concepts liés aux threads
1. Synchronisation des threads
ManualResetEvent
La méthode Set() définit l’état sur Signaled
Reset() pour le régler sur aucun signal
WaitOne() bloquera jusqu’à ce qu’il ait un signal, et s’il y a un signal au moment de l’appel de WaitOne, il ne bloquera pas
AutoResetEvent
La différence avec ManualResetEvent est qu’AutoResetEvent.WaitOne() modifie automatiquement l’état de l’objet événement, c’est-à-dire que l’état de l’événement change à chaque exécution d’AutoResetEvent.WaitOne(). Signal - > pas de signal ; Pas de signal – > a un signal
example:


  
myResetEven.Set(), qui est en réalité équivalent à un switch, si la méthode set() n’est pas exécutée, le waitOne() suivant ne pourra pas attendre la notification pour la laisser exécuter, de sorte que l’instruction après waitOne ne sera pas exécutée.
Méthode de surveillance
Le mécanisme Wait() Pulse() est utilisé pour l’interaction interthread, lorsqu’un objet émet Monitor.Wait(), le thread qui accède à l’objet reste en état d’attente. jusqu’à ce qu’il reçoive un signal de réveil. Monitor.Pulse() est utilisé pour envoyer des signaux au thread en attente.
C’est-à-dire que, dans la zone critique entre Monitor.Enter() et Monitor.Exit(), pour libérer le verrou sur l’objet et bloquer le thread courant, il est en état d’attente dans la file d’attente.

La serrure est différente de la Mutex
Synchronisation de verrous entre plusieurs threads
Synchronisation de plusieurs threads entre processus Mutex, ou synchronisation de plusieurs processus
Dans la programmation multithread .Net, les classes AutoResetEvent et ManualResetEvent sont souvent utilisées, et leur usage est très similaire, mais il existe des différences. La méthode Set place le signal à l’état d’envoi, la méthode Reset place le signal à l’état non-envoy, et WaitOne attend que le signal soit envoyé. L’état initial du constructeur peut être déterminé par la valeur du paramètre ; s’il est vrai, il ne bloque pas, et faux est l’état de blocage. Si un thread appelle la méthode WaitOne, le thread reçoit le signal lorsqu’il est en état d’envoi et continue de s’exécuter vers le bas. La différence est qu’après l’appel, AutoResetEvent.WaitOne() ne permet qu’un seul thread d’entrer à la fois, et lorsqu’un thread reçoit un signal, AutoResetEvent met automatiquement le signal en état « no send state, » et les autres threads appelant WaitOne ne peuvent que continuer à attendre. C’est-à-dire qu’AutoResetEvent ne réveille qu’un seul thread à la fois ; ManualResetEvent peut réveiller plusieurs threads, car lorsqu’un thread appelle la méthode ManualResetEvent.Set(), les autres threads appelant WaitOne reçoivent le signal pour continuer l’exécution, et ManualResetEvent ne règle pas automatiquement le signal pour ne pas être envoyé. En d’autres termes, à moins que la méthode ManualResetEvent.Reset() ne soit appelée manuelly, le ManualResetEvent restera signalé et le ManualResetEvent peut réveiller plusieurs threads simultanément pour poursuivre l’exécution.




Précédent:outil d’analyse de fichiers .har et HARViewer
Prochain:Implémentation de verrou distribué par Zookeeper
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com