Mutex vs Semaphore: wat is het verschil?

Inhoudsopgave:

Anonim

Wat is semafoor?

Semafoor is gewoon een variabele die niet negatief is en wordt gedeeld tussen threads. Een seinpaal is een signaleringsmechanisme en een thread die op een seinpaal wacht, kan worden gesignaleerd door een andere thread. Het gebruikt twee atomaire bewerkingen, 1) wacht en 2) signaal voor de processynchronisatie.

Een semafoor staat wel of geen toegang tot de bron toe, wat afhangt van hoe deze is ingesteld.

In deze tutorial leer je:

  • Wat is Mutex?
  • Gebruik van Semaphore
  • Gebruik van Mutex
  • Verschil tussen Semaphore en Mutex
  • Veelvoorkomende misvattingen over Mutex en Semaphore
  • Voordelen van Semaphore
  • Voordelen van Mutex
  • Nadeel van semaforen
  • Nadelen van Mutex

Wat is Mutex?

De volledige vorm van Mutex is wederzijds uitsluitingsobject. Het is een speciaal type binaire semafoor dat wordt gebruikt om de toegang tot de gedeelde bron te regelen. Het bevat een mechanisme voor overerving van prioriteit om problemen met uitgebreide prioriteitsinversie te voorkomen. Hiermee kunnen huidige taken met een hogere prioriteit zo kort mogelijk in de geblokkeerde staat worden gehouden. Prioriteitsovererving corrigeert echter niet de prioriteitsinversie, maar minimaliseert slechts het effect ervan.

BELANGRIJK VERSCHIL

  • Mutex is een vergrendelingsmechanisme, terwijl Semaphore een signaleringsmechanisme is
  • Mutex is slechts een object, terwijl Semaphore een geheel getal is
  • Mutex heeft geen subtype, terwijl Semaphore twee typen heeft, namelijk semafoor en binaire semafoor.
  • Semaphore ondersteunt wijziging van wacht- en signaalbewerkingen, terwijl Mutex alleen wordt gewijzigd door het proces dat een bron kan aanvragen of vrijgeven.
  • De semafoorwaarde wordt gewijzigd met behulp van wait () en signal () bewerkingen, aan de andere kant worden Mutex-bewerkingen vergrendeld of ontgrendeld.

Gebruik van Semaphore

In het geval van een enkele buffer kunnen we de 4 KB buffer scheiden in vier 1 KB buffers. Semafoor kan worden geassocieerd met deze vier buffers. Hierdoor kunnen gebruikers en producenten tegelijkertijd aan verschillende buffers werken.

Gebruik van Mutex

Een mutex biedt wederzijdse uitsluiting, wat zowel producent als consument kan zijn die de sleutel (mutex) kan hebben en door kan gaan met hun werk. Zolang de producer de buffer vult, moet de gebruiker wachten, en vice versa. In Mutex-vergrendeling kan altijd maar een enkele thread met de hele buffer werken.

Verschil tussen Semaphore en Mutex

Parameters Semafoor Mutex
Mechanisme Het is een soort signaleringsmechanisme. Het is een vergrendelingsmechanisme.
Data type Semafoor is een variabele met een geheel getal. Mutex is slechts een object.
Wijziging De wacht- en signaalbewerkingen kunnen een semafoor wijzigen. Het wordt alleen gewijzigd door het proces dat een bron kan aanvragen of vrijgeven.
Beheer van middelen Als er geen bron vrij is, heeft het proces een bron nodig die een wachtbewerking moet uitvoeren. Het moet wachten tot de telling van de semafoor groter is dan 0. Als het is vergrendeld, moet het proces wachten. Het proces moet in een wachtrij worden gehouden. Dit hoeft alleen te worden geopend als de mutex is ontgrendeld.
Draad U kunt meerdere programma-threads hebben. U kunt meerdere programma-threads in mutex hebben, maar niet tegelijkertijd.
Eigendom De waarde kan worden gewijzigd door elk proces dat de bron vrijgeeft of verkrijgt. Objectvergrendeling wordt alleen vrijgegeven door het proces, dat de vergrendeling erop heeft verkregen.
Soorten Soorten semafoor tellen semafoor en binaire seinpaal. Mutex heeft geen subtypen.
Operatie De semafoorwaarde wordt gewijzigd met behulp van wait () en signal (). Mutex-object is vergrendeld of ontgrendeld.
Bezetting van middelen Het is bezet als alle bronnen worden gebruikt en het proces dat om een ​​bron vraagt, de handeling wait () uitvoert en zichzelf blokkeert totdat het aantal semaforen> 1 wordt. Als het object al is vergrendeld, wacht het proces dat om bronnen vraagt, en wordt het door het systeem in de wachtrij geplaatst voordat de vergrendeling wordt opgeheven.

Veelvoorkomende feiten over Mutex en Semaphore

Hier zijn enkele algemene feiten over Mutex en Semaphore:

  • Slechts één taak kan de mutex verkrijgen. Er is dus eigendom gekoppeld aan een mutex en alleen de eigenaar kan de mutex vrijgeven.
  • De redenen voor het gebruik van mutex en semafoor zijn verschillend, misschien vanwege de gelijkenis in hun implementatie, een mutex zou binaire semafoor worden genoemd.
  • Een zeer bekende misvatting is dat Mutexes en Semaphores bijna hetzelfde zijn, met het enige verschil dat een Mutex tot 1 kan tellen, terwijl Semaphores van 0 tot N kunnen tellen.
  • Er is altijd onzekerheid tussen binaire semafoor en mutex. Je hoort misschien dat een mutex een binaire semafoor is, wat niet correct is.

Voordelen van Semaphore

Hier zijn de voor- / voordelen van het gebruik van Semaphore:

  • Het geeft meer dan één thread toegang tot de kritieke sectie
  • Semaforen zijn machineonafhankelijk.
  • Semaforen worden geïmplementeerd in de machineonafhankelijke code van de microkernel.
  • Ze laten niet toe dat meerdere processen de kritieke sectie betreden.
  • Omdat er in de semafoor een drukke wachttijd is, is er nooit een verspilling van procestijd en middelen.
  • Ze zijn machineonafhankelijk, wat moet worden uitgevoerd in de machineonafhankelijke code van de microkernel.
  • Ze maken flexibel beheer van middelen mogelijk.

Voordelen van Mutex

Hier zijn belangrijke voor- / voordelen van Mutex

  • Mutexes zijn slechts eenvoudige vergrendelingen die worden verkregen voordat ze de kritieke sectie betreden en deze vervolgens loslaten.
  • Omdat slechts één thread zich in zijn kritieke sectie bevindt, zijn er geen racecondities en blijven de gegevens altijd consistent.

Nadeel van semaforen

Hier zijn nadelen / nadeel van semafoor

  • Een van de grootste beperkingen van een semafoor is prioriteitsinversie.
  • Het besturingssysteem moet alle oproepen bijhouden om te wachten en seinpaal te geven.
  • Het gebruik ervan wordt nooit afgedwongen, maar het is alleen volgens afspraak.
  • Om impasses in de semafoor te voorkomen, moeten de bewerkingen Wait en Signal in de juiste volgorde worden uitgevoerd.
  • Semafoorprogrammering is een complexe methode, dus er zijn kansen om geen wederzijdse uitsluiting te bereiken.
  • Het is ook geen praktische methode voor grootschalig gebruik, aangezien het gebruik ervan leidt tot verlies van modulariteit.
  • Semafoor is meer vatbaar voor programmeerfouten.
  • Het kan een impasse of schending van wederzijdse uitsluiting veroorzaken als gevolg van een programmeerfout.

Nadelen van Mutex

Hier zijn nadelen / nadeel van Mutex

  • Als een thread een vergrendeling krijgt en in slaap valt of wordt onderbroken, kan de andere thread mogelijk niet verder gaan. Dit kan tot uithongering leiden.
  • Het kan niet worden vergrendeld of ontgrendeld vanuit een andere context dan degene die het heeft verkregen.
  • Er mag slechts één thread tegelijk in de kritieke sectie worden toegestaan.
  • De normale implementatie kan leiden tot een drukke wachttoestand, wat CPU-tijd verspilt.