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

Vue: 24412|Répondre: 1

[Source] La différence entre ManualResetEvent et AutoResetEvent appris par les threads C#

[Copié le lien]
Publié sur 31/05/2018 14:59:47 | | | |
Parlons d’abord de ManualResetEvent, et je vais intercaler quelques contenus AutoResetEvent pendant la discussion pour comparer :

ManualResetEvent peut bloquer un ou plusieurs threads jusqu’à ce qu’un signal soit reçu demandant à ManualResetEvent d’arrêter de bloquer le thread courant.

Informations sur ManualResetEvent

Fil de fil .net/c# Suspendre et Reprendre solutions obsolètes
https://www.itsvse.com/thread-4769-1-1.html
(Source : Architect_Programmer)


Imaginez que l’objet ManualResetEvent possède une propriété de type booléen, IsRelease, pour contrôler le blocage du thread courant. Nous pouvons définir cette propriété lors de l’initialisation, comme ManualResetEvent event=new ManualResetEvent(false) ; Cela indique que la propriété par défaut est de bloquer le thread courant.

Exemple de code :



Notez ici une différence importante entre ManualResetEvent et AutoResetEvent :

Le manuel enverra certainement un signal à la fois au fil 1 et au fil 2,L’automatique n’envoie un signal qu’à l’un d’eux de façon aléatoire.

Pourquoi l’un s’appelle-t-il manuel et l’autre automatique ? Je pense que c’est une question que beaucoup de gens se posent, et maintenant nous allons l’examiner.

Juste now_manualResetEvent. Set() ; Je pense que tout le monde comprend cette phrase, qui peut être considérée comme une mise en valeur de la propriété d’IsRelease

_manualResetEvent.WaitOne() ; Ne bloque plus le thread 1 après avoir reçu un signal. La valeur d’IsRelease est vraie tout au long du processus après cela.Si

Si vous souhaitez remettre la valeur d’IsRelease en false, vous devez appeler à nouveau la méthode _manualResetEvent.Reset().

Si c’est _autoResetEvent.set(), alors _autoResetEvent.WaitOne() mettra automatiquement la valeur d’IsRelease sur false.

C’est pourquoi l’un s’appelle automatique et l’autre manuel.



Code de test :







Précédent:. Le composant de cartographie d’objets OOM le plus rapide de .NET, Tiny Mapper, en pratique de projet
Prochain:Explication détaillée des informations de débogage DEBUG en C#
 Propriétaire| Publié sur 18/12/2024 20:30:44 |
ManualResetEvent et AutoResetEvent héritent tous deux deEventWaitHandle, comme montré dans la figure ci-dessous :



Référence:La connexion hyperlientérée est visible.

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