Semaphor gegen Mutex
Semaphor ist eine Datenstruktur, die verwendet wird, um sicherzustellen, dass mehrere Prozesse nicht gleichzeitig auf eine gemeinsame Ressource oder einen kritischen Abschnitt in parallelen Programmierumgebungen zugreifen. Semaphoren werden verwendet, um tote Schlösser und Rassenbedingungen zu vermeiden. Mutex (gegenseitiges Ausschlussobjekt) wird auch verwendet, um den Zugriff auf eine gemeinsame Ressource gleichzeitig durch mehrere gleichzeitige Prozesse zu vermeiden.
Was ist ein Semaphor?
Semaphor ist eine Datenstruktur, die verwendet wird, um einen gegenseitigen Ausschluss auf kritische Abschnitte zu liefern. Semaphoren unterstützen hauptsächlich zwei Operationen namens Wait (historisch als P) und Signal (historisch als V bekannt). Der Wartevorgang blockiert einen Vorgang, bis das Semaphor geöffnet ist und der Signalvorgang ein anderer Vorgang (Thread) eingeben kann. Jedes Semaphor ist einer Warteschlange von Warte Prozessen zugeordnet. Wenn der Wartevorgang von einem Thread aufgerufen wird, kann der Thread fortgesetzt, wenn das Semaphor geöffnet ist. Wenn das Semaphor geschlossen ist, wenn der Wartevorgang von einem Thread aufgerufen wird, ist der Thread blockiert und muss in der Warteschlange warten. Die Signaloperation öffnet ein Semaphor und wenn in der Warteschlange bereits ein Thread wartet, darf dieser Vorgang fortfahren. Wenn in der Warteschlange keine Threads warten, wird das Signal für die nächsten Threads erinnert. Es gibt zwei Arten von Semaphoren, die als Mutex -Semaphoren bezeichnet werden und Semaphoren zählen. MUTEX -Semaphoren ermöglichen einen einzelnen Zugriff auf eine Ressource und das Zählen von Semaphoren ermöglichen es mehreren Threads, auf eine Ressource zuzugreifen (mit mehreren Einheiten verfügbar).
Was ist ein Mutex?
Wenn eine Computeranwendung gestartet wird, wird ein Mutex erstellt und an eine Ressource angehängt. Wenn die Ressource von einem Thread verwendet wird, wird sie gesperrt und andere Threads können sie nicht verwenden. Wenn ein anderer Thread dieselbe Ressource verwenden möchte, muss er eine Anfrage stellen. Dann wird dieser Faden in eine Warteschlange gestellt, bis der erste Thread mit der Ressource beendet ist. Wenn der erste Thread mit der Ressource beendet ist, wird die Sperre entfernt und der Thread, der in der Warteschlange wartet, kann Zugriff auf die Ressource erhalten. Wenn in der Warteschlange mehrere Threads warten, erhalten sie rotierende Zugriff. Wenn der Mutex den Zugriff auf eine Ressource zwischen mehreren Threads wechselt, ist er praktisch sichtbar, da mehrere Threads gleichzeitig eine Ressource konsumieren. Aber intern greifen nur ein einzelner Thread zu einem bestimmten Zeitpunkt auf die Ressource zu.
Was ist der Unterschied zwischen Semaphor und Mutex?
Obwohl sowohl die Semaphoren als auch die Mutex -Objekte verwendet werden, um einen gegenseitigen Ausschluss in parallelen Programmierumgebungen zu erreichen, weisen sie einige Unterschiede auf. Ein Mutex -Objekt ermöglicht es einem einzelnen Thread nur, eine Ressource oder einen kritischen Abschnitt zu konsumieren, während Semaphoren eine eingeschränkte Anzahl gleichzeitiger Zugriff auf eine Ressource ermöglichen (unter einer maximal zulässigen Zahl). Mit Mutex -Objekten müssen andere Threads, die auf die Ressource zugreifen möchten, in einer Warteschlange warten, bis der aktuelle Thread mit der Ressource fertig ist.