Unterschied zwischen Mutex und Event Unterschied zwischen

Anonim

Mutex vs Ereignis

In C # gibt es viele verschiedene Threading-Synchronisierungsoptionen. Die zwei am häufigsten verwendeten sind Mutex und Event. Was genau ist der Unterschied zwischen diesen beiden? Welche ist eine bessere Option?

Die Ereignisoption kann Threads die Möglichkeit geben, bis zur Übertragung eines Ereignisses zu blockieren, also den Namen "event. "Es ist dasselbe, wie etwas in den Schlaf zu legen und es nur aufzuwecken, wenn etwas Bedeutendes passiert. Ereignisse sind im Gegensatz zu Mutexen, da Mutexe nicht über die Signalisierungsoption oder -funktion verfügen. Ereignisse können das Signal löschen, sobald jemand, der darauf warten konnte, aufgewacht ist. Sogar APIs sind in der Lage, die Option zu blockieren, bis eines oder alle der verschiedenen Ereignisse signalisiert werden. Darüber hinaus sind Ereignisse Kernel-Objekte. Sie sind nicht "leichter" als Mutexe. 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 Ausgrenzung. Es ist eine Form von bereichsspezifischem Koordinationsmechanismus für Ressourcen, 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 in dem Fall, dass andere bereits darauf zugreifen), die Sie blockieren. Ein Mutex besteht aus zwei Zuständen, obwohl er existiert, um einen gegenseitigen Ausschluss zu bewirken. Dies ist der Fall, wenn Sie eine Codezeile schützen möchten, die normalerweise eine freigegebene Ressource von dem Teil aktualisiert, in dem der Mutex beansprucht wird, zu dem Teil, in dem er freigegeben wird. Dies führt dazu, dass kein anderer Thread den Abschnitt passieren kann.

Wer mit Hilfe eines Mutex versucht hat, ein Ereignis zu simulieren, musste auf das Problem stoßen, dass die Person, sobald das Schloss erworben oder das Ereignis signalisiert wurde, alle anderen draußen hält bis das Schloss freigegeben wird. Dies ist nicht die Semantik eines Ereignisses, das signalisiert wird. Ein Event kann weiterhin gepostet werden, und für alle Thread-Tests steht eine Form von Gate zur Verfügung, falls keine Sperren vorliegen. Mutex, das zur Interprozesssynchronisierung verpflichtet ist, befindet sich im Kernelmodus-Objekt. Ereignisse, die für die Multithread-Synchronisation mit einer Methode durchgeführt werden, befinden sich im Benutzermodus-Objekt.

Das Mutex-Objekt ist zu schwer und zu allgemein. Ereignisobjekte sind viel leichter. In den meisten Situationen wird die Synchronisierung im Benutzermodus verwendet, da weniger CPU-Zyklen erforderlich sind. Mutex ähnelt sehr einem kritischen Abschnitt und wird verwendet, um den Zugriff auf freigegebene Ressourcen zu synchronisieren. Ereignisse haben eine völlig andere Funktion, da sie zum Synchronisieren von Aufgaben oder zum Verwalten der Aufgabenplanung für einige Personen verwendet werden.

Ereignisse sind eher eine Bedingungsvariable, im Gegensatz zu Mutex, das in einigen der Terminologie mehr wie ein

-Monitor ist, oder es kann eine traditionelle Form von Semaphor / Mutex sein.

Zusammenfassung:

1. Die Event-Option ist in der Lage, Threads die Möglichkeit zu geben, zu blockieren, bis ein Event gesendet wird, also den Namen "event. "

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 Ausgrenzung. Es ist eine Form von bereichsspezifischem Koordinationsmechanismus für Ressourcen, die gemeinsam genutzt werden.

4. Mutex, das zur Interprozesssynchronisierung verpflichtet ist, befindet sich im Kernelmodus-Objekt. Ereignisse, die für die Multithread-Synchronisation mit einer Methode durchgeführt werden, befinden sich im Benutzermodus-Objekt.

5. Ereignisse sind eher eine Bedingungsvariable, anders als der Mutex, der in einigen der Terminologie mehr wie ein

Monitor ist, oder er kann eine traditionelle Form von Semaphor / Mutex sein.