Mutex vs Semaphore
En mutex är analog med en enda nyckel till ett rum. En person som håller nyckeln, som är analog med en tråd, är den enda som kan få tillgång till rummet. Personen med tillgången måste då ge upp nyckeln till nästa person i linje. Därför kan en mutex bara släppas av tråden som förvärvar den.
En mutex används normalt för att serialisera åtkomsten till en del av en reentrantkod "" en typ av kod som inte kan utföras av flera trådar samtidigt. Endast en enda tråd är tillåten i en sektion. Detta tvingar de andra trådarna i kö för att vänta. Innan en tråd får tillgång, måste den vänta tills tråden innan den ger upp sektionen.
Med samma analogi i mutex är semaforer antalet liknande nycklar som kan komma åt samma antal rum med liknande lås. En semafor eller värdet på ett semaforantal beror på hur många personer (trådar) som kommer in eller ut ur rummet. Om det finns 5 rum och de är alla upptagna, är semaforräkningen noll. Om två lämnar rummet, är räkningen två och de två nycklarna ges till nästa två i köen.
Med detta sagt kan semaforer samtidigt signaleras av någon tråd eller process och är idealiska för applikationer som kräver synkronisering. Ändå används semaforer för att effektivt begränsa antalet samtidiga användare av en gemensam resurs baserad på maximal antal semafor.
Så i grunden kan en mutex anses som en semafor som har ett värde av en.
Minskningen och ökningen av semaforen beror på huruvida trådar begär tillgång till den gemensamma resursen eller lämnar sektionen.
I teorin är mutex och (binära) semaforer semantiskt lika. Implementeringen av mutex kan göras med hjälp av semaforer och så är å andra sidan. Men i praktiken kan de vara lite annorlunda.
Mutexes är endast avsedda för ömsesidig uteslutning och binära semaforer är avsedda att användas för ömsesidig uteslutning och händelseanmälan. Trots att de är mycket lika med genomförande och generell semantik används de annorlunda.
Sammanfattning:
1. Mutex används vanligtvis för att serialisera åtkomst till en gemensam resurs medan en semafor är ett antal samtidiga åtkomstpunkter.
2. Mutex är som en semafor med ett tal av en.
3. Mutex tillåter bara en enda tråd att få åtkomst medan semaforer kan synkroniseras samtidigt av någon tråd eller process.
4. Semaforer är idealiska för synkronisering och används ofta för händelseanmälan och ömsesidig uteslutning medan mutex endast tillämpas för ömsesidig uteslutning.