Skillnad mellan Mutex och Semaphore Skillnad mellan

Anonim

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å en semaforräkning beror på antalet 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 det sagt kan semaforer samtidigt signaleras av vilken tråd som helst, och de ä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 princip kan en mutex betraktas 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 mutexen 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 avseende på implementering 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 en räkning 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 ömsesidigt uteslutande medan mutex endast tillämpas för ömsesidig uteslutning.