Mutex vs Semaphore: Vad är skillnaden?

Innehållsförteckning:

Anonim

Vad är Semaphore?

Semafor är helt enkelt en variabel som inte är negativ och delas mellan trådarna. En semafor är en signalmekanism och en tråd som väntar på en semafor kan signaleras av en annan tråd. Den använder två atomoperationer, 1) vänta och 2) signal för processynkronisering.

En semafor tillåter eller tillåter inte åtkomst till resursen, vilket beror på hur den är inställd.

I den här handledningen lär du dig:

  • Vad är Mutex?
  • Användning av Semaphore
  • Användning av Mutex
  • Skillnad mellan Semaphore och Mutex
  • Vanliga missuppfattningar om Mutex och Semaphore
  • Fördelar med Semaphore
  • Fördelar med Mutex
  • Nackdelen med semaforer
  • Nackdelar med Mutex

Vad är Mutex?

Den fullständiga formen av Mutex är ett ömsesidigt uteslutningsobjekt. Det är en speciell typ av binär semafor som används för att kontrollera åtkomst till den delade resursen. Den innehåller en prioriterad ärvsmekanism för att undvika utökade prioritetsinversionsproblem. Det gör att nuvarande högre prioritetsuppgifter kan hållas i blockerat tillstånd på kortast möjliga tid. Prioriteringsarv korrigerar dock inte prioritetsinversion utan minimerar bara dess effekt.

NYCKELSKILL

  • Mutex är en låsmekanism medan Semaphore är en signalmekanism
  • Mutex är bara ett objekt medan Semaphore är ett heltal
  • Mutex har ingen undertyp medan Semaphore har två typer, som räknar semafor och binär semafor.
  • Semaphore stöder modifiering av väntetider och signaloperationer, medan Mutex endast modifieras av processen som kan begära eller släppa en resurs.
  • Semaforvärdet modifieras med hjälp av väntetider () och signal (), å andra sidan är Mutex-operationer låsta eller olåsta.

Användning av Semaphore

När det gäller en enda buffert kan vi separera 4 KB-bufferten i fyra 1 KB-buffertar. Semafor kan associeras med dessa fyra buffertar. Detta gör att användare och producenter kan arbeta på olika buffertar samtidigt.

Användning av Mutex

En mutex ger ömsesidig uteslutning, som kan vara antingen producent eller konsument som kan ha nyckeln (mutex) och fortsätta med sitt arbete. Så länge producenten fyller buffert måste användaren vänta och tvärtom. I Mutex-lås kan hela tiden bara en enda tråd fungera med hela bufferten.

Skillnad mellan Semaphore och Mutex

Parametrar Semafor Mutex
Mekanism Det är en typ av signalmekanism. Det är en låsmekanism.
Data typ Semafor är en heltalsvariabel. Mutex är bara ett objekt.
Modifiering Vänta- och signaloperationerna kan ändra en semafor. Det modifieras endast av processen som kan begära eller släppa en resurs.
Resurshantering Om ingen resurs är ledig, kräver processen en resurs som ska utföra vänta. Det bör vänta tills räkningen av semaforen är större än 0. Om den är låst måste processen vänta. Processen ska hållas i kö. Detta behöver endast nås när mutex är upplåst.
Tråd Du kan ha flera programtrådar. Du kan ha flera programtrådar i mutex men inte samtidigt.
Äganderätt Värde kan ändras genom valfri process som släpper eller skaffar resursen. Objektlås frigörs endast av processen, som har fått låset på det.
Typer Typer av semafor räknar semafor och binär semafor. Mutex har inga undertyper.
Drift Semaforvärdet modifieras med användning av vänta () och signal (). Mutex-objekt är låst eller olåst.
Resurser Beläggning Det är upptaget om alla resurser används och processen som begär resurs utför wait () -operation och blockerar sig själv tills semaforantalet blir> 1. Om objektet redan är låst väntar processen som begär resurser och köas av systemet innan låset släpps.

Vanliga fakta om Mutex och Semaphore

Här är några vanliga fakta om Mutex och Semaphore:

  • Endast en uppgift kan förvärva mutex. Så det finns ägande kopplat till en mutex, och endast ägaren kan släppa mutex.
  • Anledningarna till att använda mutex och semafor är olika, kanske på grund av likheten i deras implementering, skulle en mutex kallas binär semafor.
  • En mycket känd missuppfattning är att Mutexes och Semaphores är nästan samma, med den enda skillnaden att en Mutex kan räkna till 1, medan Semaphores kan räkna från 0 till N.
  • Det finns alltid osäkerhet mellan binär semafor och mutex. Du kanske hör att en mutex är en binär semafor, vilket inte är korrekt.

Fördelar med Semaphore

Här är fördelar / fördelar med att använda Semaphore:

  • Det ger mer än en tråd åtkomst till det kritiska avsnittet
  • Semaforer är maskinoberoende.
  • Semaforer implementeras i mikrokernels maskinoberoende kod.
  • De tillåter inte att flera processer kommer in i det kritiska avsnittet.
  • Eftersom det är upptagen att vänta i semafor finns det aldrig slöseri med procestid och resurser.
  • De är maskinoberoende, som ska köras i den maskinoberoende koden för mikrokärnan.
  • De möjliggör flexibel hantering av resurser.

Fördelar med Mutex

Här är viktiga fördelar / fördelar med Mutex

  • Mutexes är bara enkla lås som erhålls innan de går in i dess kritiska avsnitt och sedan släpper det.
  • Eftersom endast en tråd är i dess kritiska avsnitt vid varje given tidpunkt finns det inga rasförhållanden, och data förblir alltid konsekventa.

Nackdelen med semaforer

Här är nackdelar / nackdel med semafor

  • En av de största begränsningarna av en semafor är prioritetsinversion.
  • Operativsystemet måste hålla reda på alla samtal för att vänta och signalera semafor.
  • Deras användning verkställs aldrig, men det är endast enligt konvention.
  • För att undvika blockeringar i semafor måste operationerna Vänta och Signal utföras i rätt ordning.
  • Semaforprogrammering är en komplex metod, så det finns chanser att inte uppnå ömsesidig utslagning.
  • Det är inte heller någon praktisk metod för storskalig användning eftersom deras användning leder till förlust av modularitet.
  • Semaphore är mer benägen för programmeringsfel.
  • Det kan orsaka dödläge eller kränkning av ömsesidig uteslutning på grund av programmeringsfel.

Nackdelar med Mutex

Här är nackdelar / nackdelar med Mutex

  • Om en tråd får ett lås och går i viloläge eller den är förhindrad kan den andra tråden kanske inte gå framåt. Detta kan leda till svält.
  • Det kan inte låsas eller låsas upp från ett annat sammanhang än det som förvärvade det.
  • Endast en tråd bör tillåtas i det kritiska avsnittet åt gången.
  • Den normala implementeringen kan leda till upptagen vänteläge, vilket slösar CPU-tid.