Verschil tussen Mutex en Semaphore Verschil tussen
Mutex vs Semaphore
Een mutex is analoog aan een enkele sleutel van een kamer. Een persoon die de sleutel vasthoudt, die analoog is aan een draad, is de enige die toegang heeft tot de ruimte. De persoon met de toegang zal dan de sleutel moeten opgeven voor de volgende persoon in de rij. Daarom kan een mutex alleen worden vrijgegeven door de thread die deze krijgt.
Normaal gesproken wordt een mutex gebruikt om de toegang tot een sectie van een code "" in te voeren, een soort code die niet door meerdere threads tegelijk kan worden uitgevoerd. Slechts een enkele thread is toegestaan in een sectie. Dit dwingt de andere threads in de wachtrij te wachten. Voordat een thread toegang krijgt, moet hij wachten tot de thread voordat hij de sectie verlaat.
Met dezelfde analogie in mutex zijn semaforen het aantal vergelijkbare sleutels dat toegang heeft tot hetzelfde aantal kamers met vergelijkbare sloten. Een semafoor of de waarde van een semafoor telt, is afhankelijk van het aantal mensen (threads) die de kamer binnenkomen of verlaten. Als er 5 kamers zijn en ze allemaal bezet zijn, is het aantal semaforen nul. Als twee de kamer verlaten, is de telling twee en worden de twee sleutels gegeven aan de volgende twee in de wachtrij.
Dat gezegd hebbende, kunnen semaforen gelijktijdig worden gesignaleerd door elke thread of elk proces en zijn ze ideaal voor applicaties die synchronisatie vereisen. Desalniettemin worden semaforen gebruikt om effectief het aantal gelijktijdige gebruikers van een gemeenschappelijke bron te beperken op basis van het maximale aantal semaforen.
Dus eigenlijk kan een mutex worden beschouwd als een semafoor met een waarde van één.
De afname en toename van de semafoor zijn afhankelijk van of threads toegang vragen tot de gemeenschappelijke resource of de sectie verlaten.
In theorie zijn mutex en (binaire) semaforen semantisch vergelijkbaar. De implementatie van de mutex kan worden gedaan met behulp van semaforen en zo is het ook andersom. In praktische zin kunnen ze echter een beetje anders zijn.
Mutexen zijn alleen bedoeld om te worden toegepast voor wederzijdse uitsluiting en binaire semaforen zijn bedoeld om te worden gebruikt voor wederzijdse uitsluiting en melding van gebeurtenissen. Hoewel ze qua implementatie en algemene semantiek erg op elkaar lijken, worden ze op een andere manier gebruikt.
Samenvatting:
1. Mutex wordt meestal gebruikt om toegang tot een gemeenschappelijke bron te serialiseren, terwijl een semafoor een aantal gelijktijdige toegangen is.
2. Mutex is als een semafoor met een telling van één.
3. Mutex staat slechts één thread toe om toegang te hebben terwijl semaforen gelijktijdig kunnen worden gesignaleerd door elke thread of proces.
4. Semaforen zijn ideaal voor synchronisatie en worden vaak gebruikt voor melding van gebeurtenissen en wederzijdse uitsluiting, terwijl mutex alleen wordt toegepast voor wederzijdse uitsluiting.