2009-04-22 5 views
1

Was ist der wirkliche Unterschied Konzeptionell und Implementierung Sicht zwischenThreading/Synchronisation

Semophore, Mutex, Monitor?

Wir sagen Semophores Ressourcenzuweisung Zähler sind ... OK ich das verstehen ..

Für Mutex sagen wir Mutex Binary Semophore sind ... Gosh, was das ist ???

Monitor überwacht den Einstiegspunkt für ein Objekt ... d. H. Nur ein Thread kann es erfassen und kann einen seiner geschützten Einstiegspunkte laufen lassen ??? Dann was sind Mutex für ??

+0

dupe: http://stackoverflow.com/questions/760168/when-should-each-thread-synchronization-objects-be- – finnw

Antwort

1

Semaphore sind ein Sperrmechanismus, der konzeptionell so konfiguriert werden kann, dass mehrere Objekte mit einem Objekt verbunden werden können. z.B. Zugriff auf drei auf einmal, vier auf einmal usw.

Mutex sind ein Spezialfall eines Semaphors zur Gewährleistung des gegenseitigen Ausschlusses, d.h. Nur einer kann jederzeit auf die geschützte Ressource zugreifen.

Es ist wichtig zu beachten, dass weder der Semaphor noch der Mutex eine strikte Reihenfolge beim Warten auf den Zugriff auf die freigegebene Ressource gewährleisten. Wenn die Ressource zugänglich wird, erhält ein wartender Thread Zugriff, aber es wird kein Garuantees darüber gemacht, welcher Thread das sein wird. Statistisch werden (eventuell) alle Threads Zugang erhalten.

Ein Monitor erzwingt einen Vorrang für die wartenden Threads/Prozesse, indem er sie in einer bestimmten Reihenfolge einreiht, nicht unbedingt wie sie ankommen. Ein Betriebssystem ist ein Beispiel für einen Monitor - sicherstellen, dass ein einzelner Prozess die CPU zu einem bestimmten Zeitpunkt hat.

+0

Nun nette Erklärung nur noch eine Sache. Semaphore halten eine Datenstruktur wahrscheinlich eine Queue mit sich selbst, um Thread-Wartezeiten zu machen, wenn Ressourcen nicht zugewiesen werden können. Ist das nicht eine Form der Bestellung? Und wenn Sie mehr über die Arbeit von Mutex und Differenz b/w Monitor und Mutex erarbeiten können. –

+0

Keine Semaphore enthalten nur die bedingte Variable. Es gibt keine Warteschlange mit Semaphoren. Die Warteschlange gehört, wenn Sie darüber nachdenken, dem Betriebssystem und wird normalerweise die "Warte" -Warteschlange genannt, in der alle blockierenden Prozesse leben. Wenn die Semaphor-Bedingung für den nächsten Thread/Prozess bereit ist, wird der Prozess, der zuerst "aufwacht", wahrscheinlich die Sperre erhalten. Jeder wartende Thread kann die Sperre erhalten. http://en.wikipedia.org/wiki/Semaphore_(Programming) hat eine einfache Implementierung von Semaphoren. – paxos1977