2010-09-16 7 views
7

Warum brauchen wir Mutex und Events in Windows? In dem Sinn könnte Windows nicht nur Mutex haben? Was kann mit Ereignissen geschehen, die mit Mutex nicht möglich sind?Mutex und Event unter Windows

Antwort

9

Ereignisse können Threads blockieren, bis ein Ereignis (daher der Name) gesendet wird. Das Blockieren eines Ereignisses bedeutet "Wecke mich, wenn etwas passiert ist"; Sie erwarten, dass Sie schlafen gelegt werden. Event's sind ein Signalisierungsmechanismus und bieten Unterstützung für das, was nicht auf Mutexen gefunden wird, wie zum Beispiel das automatische Löschen des Signals, sobald jemand, der darauf gewartet hat, aufgewacht ist. Die API erlaubt auch das Blockieren bis einer der oder alle mehrere Ereignisse werden signalisiert.

Der Mutex (Mutual Exclusion) dagegen ist ein koordinierter Koordinationsmechanismus für gemeinsame Ressourcen. Denken Sie Transaktion. Sie erwarten nicht, dass Sie warten müssen, sondern auf eine freigegebene Ressource zugreifen möchten, und nur für den Fall, dass andere bereits darauf zugreifen, blockieren Sie.

Wenn Sie versucht haben, ein Ereignis mit einem Mutex zu simulieren, haben Sie das Problem, dass Sie alle anderen aussperren, sobald Sie die Sperre erhalten haben (was "signalisierte Ereignisse" bedeuten sollte) sperren. Das ist nicht die Semantik der Signalisierung eines Ereignisses; Es kann weiterhin gepostet werden, und die "Gates" sind für jeden Thread-Test für das Ereignis geöffnet, ohne irgendwelche Sperren zu erhalten.

+0

"ist ein Bereichskoordinationsmechanismus für freigegebene Ressourcen. Think transaction" ... haben Sie [this] (http://www.differencebetween.net/miscellaneous/difference-between-mutex-and-event/) geschrieben als Gut? –

1

Mutex dediziert für Interprozess-Synchronisation. Dies ist ein Kernel-Modus-Objekt. Ereignisse für Multithread-Synchronisation innerhalb eines Prozesses. Dies ist ein Benutzermodus-Objekt.

Mutex-Objekt ist sehr allgemein und zu schwer, auf der anderen Seite Ereignisobjekt ist viel mehr Licht. In den meisten Situationen müssen Sie die Synchronisierung im Benutzermodus verwenden, da sie weniger CPU-Zyklen bietet.

+0

Opps (verpasst ... – yozhik