Unterschied zwischen Mutex und Ereignis
- 640
- 39
- Cem Schlitzer
Mutex vs Ereignis
In C#gibt es viele verschiedene Threading -Synchronisationsoptionen. Die beiden weit verbreiteten verwendeten sind Mutex und Ereignis. Genau was genau der Unterschied zwischen diesen beiden ist? Welches ist eine bessere Option?
Die Ereignisoption kann Threads die Option geben, bis ein Ereignis ausgestrahlt wird.”Es ist dasselbe wie etwas zu schlafen und es nur aufzuwecken, wenn etwas von Bedeutung passiert. Die Ereignisse unterscheiden. Ereignisse sind in der Lage, das Signal zu löschen, wenn jemand, der darauf warten konnte, geweckt wurde. Sogar APIs können die Option ermöglichen, sich zu blockieren, bis eines oder alle verschiedenen Ereignisse signalisiert sind. Darüber hinaus sind Ereignisse Kernel -Objekte. Sie sind im Vergleich zu Mutexes nicht „leichter“. Ein Ereignis ist im Grunde ein Kernel -Objekt 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 gegenseitige Ausschluss. Es handelt sich um eine Form des Scoped -Koordinationsmechanismus für Ressourcen, die gemeinsam genutzt werden. Betrachten Sie es als eine Form der Transaktion. Sie sind nicht verpflichtet zu warten, obwohl Sie auf einige gemeinsam genutzte Ressourcen zugreifen möchten (nur in der Instanz, die andere bereits darauf zugreifen), Sie blockieren. Ein Mutex besteht aus zwei Zuständen, obwohl er vorhanden ist, um einen gegenseitigen Ausschluss in Kraft zu setzen. Dies ist für den Fall, wenn Sie einen Codeabschnitt schützen möchten, der normalerweise eine gemeinsam genutzte Ressource aus dem Teil aktualisiert, in dem der Mutex an den Teil geltend gemacht wird, in dem er veröffentlicht wird. Dies führt zu der Tatsache, dass kein anderer Thread den Abschnitt durchlaufen kann.
Menschen, die versucht haben, ein Ereignis mit Hilfe eines Mutex zu simulieren. Dies ist nicht die Semantik eines Ereignisses, das signalisiert wird. Ein Ereignis kann geblieben sein und für alle Thread -Tests eine GATE -Form verfügbar sein. Mutex, das sich der Interprozess-Synchronisation verpflichtet hat, befindet sich im Kernel-Mode-Objekt. Ereignisse, die für die Multithread-Synchronisation unter einer Methode durchgeführt wurden.
Mutex -Objekt ist zu schwer und zu allgemein. Ereignisobjekte sind viel leichter. Die Synchronisation der Benutzer-Mode wird in den meisten Situationen verwendet, weil sie weniger CPU-Zyklen ergibt. Mutex ist einem kritischen Abschnitt sehr ähnlich und wird verwendet, um den Zugriff auf Ressourcen zu synchronisieren, die gemeinsam genutzt werden. Ereignisse haben eine völlig andere Funktion, da sie verwendet werden, um Aufgaben zu synchronisieren oder für einige Personen zu führen.
Ereignisse sind im Gegensatz zu Mutex eher eine Zustandsvariable, was eher wie a ist
Überwachen Sie in einigen Terminologie oder kann eine traditionelle Form von Semaphor/Mutex sein.
Zusammenfassung:
1.Die Ereignisoption kann Threads die Option geben, bis ein Ereignis ausgestrahlt wird. Daher der Name „Ereignis.”
2.Ein Ereignis ist im Grunde ein Kernel -Objekt 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 gegenseitige Ausschluss. Es handelt sich um eine Form des Scoped -Koordinationsmechanismus für Ressourcen, die gemeinsam genutzt werden.
4.Mutex, das sich der Interprozess-Synchronisation verpflichtet hat, befindet sich im Kernel-Mode-Objekt. Ereignisse, die für die Multithread-Synchronisation unter einer Methode durchgeführt wurden.
5.Ereignisse sind im Gegensatz zum Mutex eher eine Zustandsvariable, was eher wie a ist
Überwachen Sie in einigen Terminologie oder kann eine traditionelle Form von Semaphor/Mutex sein.