Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 17115|Antwort: 0

[Kommunikation] Detaillierte Erklärung von AutoResetEvent in .net/c#

[Link kopieren]
Veröffentlicht am 20.03.2018 13:19:01 | | |

Threadbezogene Konzepte
1. Thread-Synchronisation
ManualResetEvent
Die Set()-Methode setzt den Zustand auf Signaled
Reset(), um es auf kein Signal zu stellen
WaitOne() blockiert, bis es ein Signal hat, und wenn zum Zeitpunkt des Anrufs von WaitOne ein Signal vorhanden ist, blockiert es nicht
AutoResetEvent
Der Unterschied zu ManualResetEvent besteht darin, dass AutoResetEvent.WaitOne() automatisch den Zustand des Ereignisobjekts ändert, das heißt, der Zustand des Ereignisses ändert sich jedes Mal, wenn AutoResetEvent.WaitOne() ausgeführt wird. Signal – > kein Signal; Kein Signal – > hat ein Signal
example:


  
myResetEven.Set(), was tatsächlich äquivalent zu einem Switch ist, kann die folgende waitOne() nicht auf die Benachrichtigung warten, sodass die Anweisung nach waitOne nicht ausgeführt wird, sodass die Anweisung nach waitOne nicht ausgeführt wird.
Überwachungsmethode
Der Wait() Pulse()-Mechanismus wird für die Interthread-Interaktion verwendet; wenn ein Objekt Monitor.Wait() aussendet, bleibt der Thread, der auf das Objekt zuruft, im Wartezustand. Bis es ein Aufwachsignal bekommt. Monitor.Pulse() wird verwendet, um Signale an den wartenden Thread zu senden.
Das heißt, im kritischen Bereich zwischen Monitor.Enter() und Monitor.Exit(), um die Sperre des Objekts zu lösen und den aktuellen Thread zu blockieren, befindet es sich in einem Wartezustand in der Warteschlange.

Lock unterscheidet sich von Mutex
Lock-Synchronisation zwischen mehreren Threads
Synchronisation mehrerer Threads zwischen Mutex-Prozessen oder Synchronisation mehrerer Prozesse
In der .Net-Multithreaded-Programmierung werden häufig die Klassen AutoResetEvent und ManualResetEvent verwendet, deren Verwendung sehr ähnlich ist, aber es gibt Unterschiede. Die Set-Methode versetzt das Signal in den Sendezustand, die Reset-Methode versetzt das Signal in den Nicht-Senden-Zustand, und WaitOne wartet darauf, dass das Signal gesendet wird. Der Anfangszustand des Konstruktors kann durch den Parameterwert bestimmt werden: Wenn er wahr ist, blockiert er nicht, und falsch ist der blockierende Zustand. Wenn ein Thread die WaitOne-Methode aufruft, erhält er das Signal, wenn er sich im Sendezustand befindet, und führt weiter nach unten aus. Der Unterschied besteht darin, dass nach dem Aufruf AutoResetEvent.WaitOne() nur einen Thread gleichzeitig eintreten lässt, und wenn ein Thread ein Signal erhält, stellt AutoResetEvent das Signal automatisch auf keinen Senden-Zustand, während die anderen Threads, die WaitOne aufrufen, nur weiter warten können. Das heißt, AutoResetEvent weckt jeweils nur einen Thread auf; ManualResetEvent kann mehrere Threads aufwecken, weil wenn ein Thread die ManualResetEvent.Set()-Methode aufruft, die anderen Threads, die WaitOne aufrufen, das Signal zur Fortsetzung der Ausführung erhalten, und ManualResetEvent das Signal nicht automatisch so einstellt, dass es nicht gesendet wird. Mit anderen Worten: Wenn die ManualResetEvent.Reset()-Methode nicht manuell aufgerufen wird, bleibt das ManualResetEvent signalisiert und das ManualResetEvent kann mehrere Threads gleichzeitig aufwecken, um die Ausführung fortzusetzen.




Vorhergehend:.har-Datei-Parsing-Tool und HARViewer
Nächster:Implementierung des verteilten Zookeeper-Schlosses
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com