Aanbevolen, 2024

Editor'S Choice

Verschil tussen Semaphore en Mutex

Processynchronisatie speelt een belangrijke rol bij het handhaven van de consistentie van gedeelde gegevens. Zowel de software- als de hardware-oplossingen zijn aanwezig om kritieke sectieproblemen aan te pakken. Maar hardware-oplossingen voor kritieke sectieproblemen zijn vrij moeilijk te implementeren. In het artikel van vandaag bespreken we twee op software gebaseerde oplossingen om kritieke sectieproblemen aan te pakken, namelijk Semaphore en Mutex.

Het basisverschil tussen semaphore en mutex is dat semafoor een signaleringsmechanisme is, dwz processen voeren wait () en signaal () uit om aan te geven of ze de resource verwerven of vrijgeven, terwijl Mutex een vergrendelingsmechanisme is, het proces de vergrendeling moet verkrijgen mutex-object als het de resource wil verwerven. Er zijn nog meer verschillen tussen semaphore en mutex. Laten we ze bespreken met behulp van de onderstaande vergelijkingsgrafiek.

Vergelijkingstabel

Basis voor vergelijkingseinpaalmutex
basis-Semafoor is een signaalmechanisme.Mutex is een vergrendelingsmechanisme.
BestaanSemafoor is een geheel getal variabele.Mutex is een object.
FunctieSemaphore staat meerdere programmadraden toe om toegang te krijgen tot een eindige instantie van bronnen.Mutex staat toe dat meerdere programmadraad toegang krijgt tot één enkele bron, maar niet tegelijkertijd.
EigendomDe semafoorwaarde kan worden gewijzigd door elk proces dat de bron koopt of vrijgeeft.Mutex-objectvergrendeling wordt alleen vrijgegeven door het proces dat de vergrendeling heeft gekregen.
categorizerenSemafoor kan worden onderverdeeld in het tellen van semafoor en binaire semafoor.Mutex is niet verder gecategoriseerd.
OperatieSemafoorwaarde wordt gewijzigd met behulp van de bediening wait () en signal ().Mutex-object wordt vergrendeld of ontgrendeld door het proces waarbij de resource wordt aangevraagd of vrijgegeven.
Middelen bezetAls alle bronnen worden gebruikt, voert het proces dat naar resource vraagt ​​de wait () -bewerking uit en blokkeert het zichzelf totdat het aantal semafoor groter is dan één.Als een mutex-object al is vergrendeld, wacht het proces dat naar resources vraagt ​​in het systeem totdat het slot wordt vrijgegeven.

Definitie van Semaphore

Semaphore is een proces-synchronisatietool. Semafoor is meestal een geheel getal variabele S die wordt geïnitialiseerd naar het aantal bronnen dat aanwezig is in het systeem en de waarde van de semafoor kan alleen worden gewijzigd door twee functies wait () en signaal () behalve initialisatie.

De bewerking wait () en signal () wijzigen de waarde van de semafoor ondeelbaar . Dit betekent dat wanneer een proces de waarde van de semafoor wijzigt, geen enkel ander proces tegelijkertijd de waarde van de semafoor kan wijzigen. Semaphore onderscheidt zich door het besturingssysteem in twee categorieën: semaforen tellen en binaire semafoor .

Bij het tellen van de Semafoor wordt de S-waarde van de semafoor geïnitialiseerd naar het aantal bronnen dat in het systeem aanwezig is. Wanneer een proces toegang tot de resource wenst, voert het de wait () -bewerking uit op de semafoor en verlaagt de waarde van semafoor met één. Wanneer het de bron vrijgeeft, voert het de signaal () bewerking uit op de semafoor en verhoogt de waarde van de semafoor met één. Wanneer de telling van de semafoor naar 0 gaat, betekent dit dat alle bronnen worden bezet door de processen. Als een proces een resource moet gebruiken wanneer het aantal semaforen 0 is, voert het wait () uit en wordt het geblokkeerd totdat de waarde van de semafoor groter wordt dan 0.

In de binaire semafoor varieert de waarde van de semafoor tussen 0 en 1 . Het is vergelijkbaar met mutex lock, maar mutex is een vergrendelingsmechanisme terwijl de semafoor een signaalmechanisme is. In binaire semafoor, als een proces toegang wil hebben tot de resource, voert het de wait () bewerking uit op de semafoor en verlaagt de waarde van de semafoor van 1 naar 0. Wanneer het de resource vrijgeeft, voert het een signaal () bewerking uit op de semafoor en in stappen zijn waarde tot 1. Als de waarde van semafoor 0 is en een proces toegang tot de resource wil, voert het de wait () -bewerking uit en blokkeert zichzelf totdat het huidige proces dat de resources gebruikt, de resource vrijgeeft.

Definitie van Mutex

Mutual Exclusion Object wordt kortweg Mutex genoemd. Uit de term wederzijdse uitsluiting kunnen we begrijpen dat slechts één proces tegelijk toegang heeft tot de gegeven bron. Met het mutex-object kunnen de threads van meerdere programma's dezelfde resource gebruiken, maar één tegelijk tegelijk niet.

Wanneer een programma wordt gestart, vraagt ​​het het systeem om een ​​mutex-object voor een bepaalde resource te maken. Het systeem maakt het mutex-object met een unieke naam of ID. Telkens wanneer de programmadraad de resource wil gebruiken, neemt deze lock op bij het mutex-object, gebruikt de resource en na gebruik wordt het slot vrijgegeven voor het mutex-object. Dan is het volgende proces toegestaan ​​om het slot op mutex-object te verkrijgen.

Ondertussen heeft een proces het slot op mutex-object gekregen, geen ander thread / proces kan toegang krijgen tot die bron. Als het mutex-object al is vergrendeld, moet het proces dat het mutex-object wil verkrijgen, wachten en wordt het in de wachtrij geplaatst door het systeem totdat het mutex-object is ontgrendeld.

Belangrijkste verschillen tussen Semaphore en Mutex

  1. Semafoor is een signaleringsmechanisme omdat de bewerking wait () en signal () die op de semafoorvariabele wordt uitgevoerd, aangeeft of een proces de resource verwerft of de resource vrijgeeft. Aan de andere kant is de mutex een vergrendelingsmechanisme, om een ​​resource te verkrijgen, moet een proces het mutex-object vergrendelen en terwijl het vrijgeven van een resourceproces het mutex-object moet ontgrendelen.
  2. Semafoor is meestal een geheel getal variabele, terwijl mutex een object is .
  3. Met Semaphore kunnen meerdere programma-threads toegang krijgen tot het eindige exemplaar van bronnen . Aan de andere kant staat Mutex meerdere threads toe om toegang te krijgen tot een enkele gedeelde bron, maar één voor één.
  4. Semafoor-variabelenwaarde kan worden gewijzigd door elk proces dat een resource verwerft of vrijgeeft door de bewerking wait () en signal () uit te voeren. Aan de andere kant kan lock verkregen op het mutex-object alleen worden vrijgegeven door het proces dat het lock-on op mutex-object heeft verworven.
  5. Semaphore bestaat uit twee typen die de semafoor en de binaire semafoor tellen, die vrij veel lijken op de mutex.
  6. Semafoorvariabele waarde wordt gewijzigd door wait () en signaal (), afgezien van initialisatie. Het dempingsobject wordt echter vergrendeld of ontgrendeld door het proces dat het hulpmiddel verkrijgt of vrijgeeft.
  7. Als alle bronnen door het proces worden verkregen en er geen resource vrij is, voert het proces dat resource wenst te verwerven, de wait () -bewerking uit op de semafoor-variabele en blokkeert deze totdat de telling van de semafoor groter wordt dan 0. Maar als een mutex-object al bestaat vergrendeld dan het proces dat het verlangen van de resource wenst te verkrijgen en in de wachtrij wordt geplaatst door het systeem totdat de resource wordt vrijgegeven en het mutex-object wordt ontgrendeld.

Conclusie:

Semafoor is een betere optie voor het geval er meerdere instanties beschikbaar zijn. In het geval van één gedeelde bron is mutex een betere keuze.

Top