Mutex vs Event
In C # gibt es viele verschiedene Optionen für die Threading-Synchronisierung. Die zwei weiter verbreiteten sind Mutex und Event. Was genau ist der Unterschied zwischen diesen beiden? Welches ist die bessere Option?
Die Ereignisoption kann Threads die Option geben, bis zum Senden eines Ereignisses zu blockieren, also den Namen "event". Dies ist gleichbedeutend mit dem Einschlafen und Aufwecken eines Ereignisses, wenn etwas von Bedeutung ist. Ereignisse unterscheiden sich von Mutexen, da Mutexe keine Signalisierungsoption oder -funktion haben. Ereignisse können das Signal löschen, sobald jemand geweckt wurde, der darauf warten konnte. Sogar APIs können die Option zulassen, bis zu einem oder allen verschiedenen Ereignissen blockiert zu werden. Ereignisse sind außerdem Kernelobjekte. Sie sind im Vergleich zu Mutexen nicht "leichter". Ein Ereignis ist im Grunde ein Kernelobjekt mit zwei Zuständen. Normalerweise signalisiert ein Ereignis das Kommen eines Ereignisses und manchmal sogar das Ende einer E / A-Operation.
"Mutex" steht für Mutual Exclusion. Es handelt sich um eine Art Koordinierungsmechanismus für Bereiche, die gemeinsam genutzt werden. Betrachten Sie es als eine Form der Transaktion. Sie müssen nicht warten, obwohl Sie auf einige freigegebene Ressourcen zugreifen möchten (nur wenn andere bereits darauf zugreifen), die Sie blockieren. Ein Mutex besteht aus zwei Zuständen, obwohl er vorhanden ist, um einen gegenseitigen Ausschluss zu bewirken. Dies ist der Fall, wenn Sie einen Teil des Codes schützen möchten, der normalerweise eine freigegebene Ressource von dem Teil, in dem der Mutex beansprucht wird, mit dem Teil aktualisiert, in dem sie freigegeben wird. Dies führt dazu, dass kein anderer Thread den Abschnitt durchlaufen kann.
Personen, die versucht haben, ein Ereignis mit Hilfe eines Mutex zu simulieren, mussten auf das Problem stoßen, bei dem die Person, sobald die Sperre erworben wurde oder das Ereignis signalisiert wurde, alle anderen bis zur Freigabe der Sperre aufhält. Dies ist nicht die Semantik eines Ereignisses, das signalisiert wird. Ein Ereignis bleibt möglicherweise auf dem Laufenden, und für alle Thread-Tests steht eine Form von Gate zur Verfügung, wenn keine Sperren vorhanden sind. Mutex, der für die Interprozess-Synchronisierung festgelegt wurde, befindet sich in einem Objekt im Kernelmodus. Ereignisse, die für die Multithread-Synchronisation mit einer Methode ausgeführt werden, befinden sich im Benutzermodusobjekt.
Mutex-Objekt ist zu schwer und zu allgemein. Ereignisobjekte sind viel leichter. Die Synchronisation im Benutzermodus wird in den meisten Situationen verwendet, da weniger CPU-Zyklen erforderlich sind. Mutex gleicht einem kritischen Abschnitt und wird verwendet, um den Zugriff auf gemeinsam genutzte Ressourcen zu synchronisieren. Ereignisse haben eine völlig andere Funktion, da sie zur Synchronisierung von Aufgaben oder zur Verwaltung der Aufgabenplanung für einige Personen verwendet werden.
Ereignisse sind eher eine Bedingungsvariable, im Gegensatz zu Mutex, die eher a ist
Überwachen Sie in einigen Begriffen, oder es kann eine traditionelle Form von Semaphor / Mutex sein.
Zusammenfassung:
1.Die Ereignisoption kann Threads die Option geben, bis zum Senden eines Ereignisses zu blockieren, daher der Name "Ereignis".
2. Ein Event ist im Grunde ein Kernelobjekt mit zwei Zuständen. Normalerweise signalisiert ein Ereignis das Kommen eines Ereignisses und manchmal sogar das Ende einer E / A-Operation.
3. "Mutex" steht für Mutual Exclusion. Es handelt sich um eine Art Koordinierungsmechanismus für Bereiche, die gemeinsam genutzt werden.
4.Mutex, das für die Interprozess-Synchronisation festgelegt wurde, befindet sich im Kernel-Modus-Objekt. Ereignisse, die für die Multithread-Synchronisation mit einer Methode ausgeführt werden, befinden sich im Benutzermodusobjekt.
5.Events sind im Gegensatz zum Mutex eher eine Bedingungsvariable, die eher a ist
Überwachen Sie in einigen Begriffen, oder es kann eine traditionelle Form von Semaphor / Mutex sein.