2016-07-02 11 views
12

Ich lese, dass Mutex ist ein Semaphor mit Wert 1 (binäre Semaphore), die für die Durchsetzung der gegenseitigen Ausschluss verwendet wird.Monitor vs Mutex

Ich habe diesen Link Semaphore vs. Monitors - what's the difference? gelesen, der besagt, dass Monitor hilft, gegenseitigen Ausschluss zu erreichen.

Kann mir jemand den Unterschied zwischen Mutex sagen und überwachen, da beide tatsächlich das gleiche tun

Antwort

8

Da Sie nicht über die OS oder Sprache/Bibliothek Sie sprechen angegeben haben, lassen Sie mich in allgemeiner Weise beantworten .

Konzeptionell sind sie gleich. Aber in der Regel sind sie etwas anders umgesetzt

-Monitor

Üblicherweise wird die Umsetzung von Monitoren ist schneller/leicht, da es für Multi-Threaded-Synchronisation innerhalb des gleichen Prozesses ausgelegt ist. In der Regel wird es auch von einem Framework/einer Bibliothek selbst bereitgestellt (im Gegensatz zur Anforderung des Betriebssystems).

Mutex

Normalerweise mutexes durch das OS-Kernel und Bibliotheken zur Verfügung gestellt werden/Frameworks bieten einfach eine Schnittstelle um es aufzurufen. Dies macht sie schwerer/langsamer, aber sie arbeiten über Threads bei verschiedenen Prozessen. OS bietet möglicherweise auch Funktionen zum Zugriff auf den Mutex nach Namen für die einfache Freigabe zwischen Instanzen von separaten ausführbaren Dateien (im Gegensatz zur Verwendung eines Handles, das nur von fork verwendet werden kann).

+1

scheint, wie ruhig das Gegenteil (Leistung klug): http://japgolly.blogspot.bg/2012/04/ruby-mutex-reentrancy.html – akostadinov

+0

@akostadinov Ich weiß Ruby nicht, um dies zu kommentieren. Nicht einmal sicher, ob der für diesen Benchmark verwendete Code zuverlässig ist. Vielleicht ist Ruby ein Ausreißer für die allgemeine Aussage, die ich mache?Joseph Albahari hat einige [Vergleich der blockierenden Konstrukte in C#] (http://www.albahari.com/threading/part2.aspx#_Locking), die mit meinen Ansprüchen besser zu springen scheinen – Vikhram

+0

bemerkte nicht, dass diese Frage nicht ruby ​​spezifisch ist . Seltsam, aber ich bin nicht überrascht von solcher Fremdartigkeit. Ich meine über Ruby Verhalten Unterschied zu allem anderen. – akostadinov

5

Monitor sind anders als Mutex, aber sie können in einem Sinne als ähnlich angesehen werden, dass Monitor auf Mutex aufgebaut sind. Siehe Abbildung des Monitors in einem Bild an der Unterseite zur besseren Übersicht.

Monitor ist ein Synchronisierungskonstrukt, das Threads sowohl gegenseitigen Ausschluss (unter Verwendung von Sperren) als auch Kooperation ermöglicht, d. H. Die Fähigkeit, Threads warten zu lassen, dass bestimmte Bedingungen wahr sind (unter Verwendung von wait-set).

Mit anderen Worten, zusammen mit Daten, die eine Sperre implementiert, ist jedes Java-Objekt logisch Daten zugeordnet, die eine Wait-Set implementiert. Während Sperren dazu beitragen, dass Threads unabhängig voneinander auf gemeinsam genutzten Daten arbeiten können, ohne sich gegenseitig zu stören, helfen Warte-Sets den Threads, miteinander zu kooperieren, um gemeinsam auf ein gemeinsames Ziel hinzuarbeiten, z. Alle wartenden Threads werden in diesen Wartebereich verschoben und alle werden benachrichtigt, sobald die Sperre aufgehoben wird. Diese Wartezeit hilft bei der Erstellung von Monitoren mit zusätzlicher Hilfe der Sperre (mutex).

enter image description here

ich Sie möchten, können Sie meine Antwort here finden, die nicht auf diese Frage relevant sein können.

Sie können eine andere relevante Diskussion finden hier

Semaphore vs. Monitors - what's the difference?