Mutex vs Semaphore – Forskjellen mellom dem
Nøkkelforskjellen mellom Mutex og Semaphore
- Mutex er en låsemekanisme, mens Semaphore er en signalmekanisme
- Mutex er bare et objekt, mens Semaphore er et heltall
- Mutex har ingen undertype, mens semafor har to typer: tellende semafor og binær semafor.
- Semaphore støtter modifikasjon av vente- og signaloperasjoner, mens Mutex bare endres av prosessen som kan be om eller frigi en ressurs.
- Semaphore verdien endres ved å bruke vente () og signal () operasjoner, på den annen side er Mutex-operasjoner låst eller ulåst.

Her har jeg analysert forskjellen mellom Mutex og Semaphore og vil grundig evaluere fordeler og ulemper.
Vanlige fakta om Mutex og Semaphore
Med utgangspunkt i praksisen min, her er noen vanlige fakta om Mutex vs Semaphore:
- Bare én oppgave kan skaffe seg mutex. Dermed har en mutex eierskap, og bare eieren kan frigi den.
- Årsakene til å bruke mutex og semafor er forskjellige, kanskje på grunn av likhet i implementeringen, en mutex vil bli referert til som binær semafor.
- En svært kjent misforståelse er at Mutexes og Semaphores er nesten like, med den eneste forskjellen er at en Mutex er i stand til å telle til 1, mens Semaphorekan telle fra 0 til N.
- Det er alltid usikkerhet mellom binær semafor og mutex. Du kan høre at en mutex er en binær semafor, noe som ikke er riktig.
Hva er en Semaphore?
En semafor er ganske enkelt en variabel som er ikke-negativ og delt mellom tråder. En semafor er en signalmekanisme, og en tråd som venter på en semafor kan signaliseres av en annen tråd. Den bruker to atomoperasjoner, 1) vent og 2) signal for prosesssynkronisering.
A semafor enten tillater eller nekter tilgang til ressursen, noe som avhenger av hvordan den er satt opp.
Bruk av Semaphore
Når det gjelder en enkelt buffer, kan vi separere 4 KB bufferen i fire 1 KB buffere. Semaphore kan assosieres med disse fire bufferne. Dette gjør at brukere og produsenter kan jobbe på forskjellige buffere samtidig.
fordeler med Semaphore
I min praksis er her de viktigste positive sidene ved bruk av semafor:
- Den lar mer enn én tråd få tilgang til den kritiske delen
- Semaphores er maskinuavhengige.
- Semaphores er implementert i den maskinuavhengige koden til mikrokjernen.
- De tillater ikke flere prosesser å gå inn i den kritiske delen.
- Siden det er en travel ventetid i semaforen, er det aldri sløsing med prosesstid og ressurser.
- De er maskinuavhengige, som skal kjøres i den maskinuavhengige koden til mikrokjernen.
- De tillater fleksibel forvaltning av ressurser.
Ulemper med Semaphores
Her er ulempene med semafor som jeg har møtt.
- En av de største begrensningene til en semafor er prioritert inversjon.
- Operativsystemet må holde styr på alle anrop for å vente og signalisere semafor.
- Bruken av dem blir aldri håndhevet, men det er kun ved konvensjon.
- For å unngå vranglås i semaforen, venter og Signal operasjoner må utføres i riktig rekkefølge.
- Semaphore programmering er en kompleks metode, så det er sjanser for ikke å oppnå gjensidig ekskludering.
- Det er heller ikke en praktisk metode for bruk i stor skala da bruken fører til tap av modularitet.
- Semaphore er mer utsatt for programmeringsfeil.
- Det kan forårsake vranglås eller brudd på gjensidig utestenging på grunn av programmeringsfeil.
Hva er Mutex?
Den fullstendige formen for Mutex er gjensidig ekskluderingsobjekt. Det er en spesiell type binær semafor som brukes til å kontrollere tilgang til den delte ressursen. Den inkluderer en prioritert arvemekanisme for å unngå problemer med utvidet prioritet inversjon. Den lar gjeldende oppgaver med høyere prioritet holdes i blokkert tilstand for kortest mulig tid. Prioritetsarv korrigerer imidlertid ikke prioritetsinversjon, men minimerer bare effekten.
Bruk av Mutex
En mutex gir gjensidig eksklusjon, som kan være enten produsent eller forbruker som kan ha nøkkelen (mutex) og fortsette med sitt arbeid. Så lenge produsenten fyller buffer, må brukeren vente, og omvendt. I Mutex-lås kan hele tiden bare en enkelt tråd fungere med hele bufferen.
Fordeler med Mutex
Fra det jeg har observert, her er de viktigste fordelene med Mutex:
- Mutexes er bare enkle låser oppnådd før du går inn i den kritiske delen og deretter slipper den.
- Siden bare én tråd er i den kritiske delen til enhver tid, er det ingen løpsforhold, og data forblir alltid konsistente.
Ulemper med Mutex
I min praksis har jeg identifisert flere ulemper med Mutex.
- Hvis en tråd får en lås og går i dvale, eller den blir forhåndsaktivert, kan det hende at den andre tråden ikke kan gå videre. Dette kan føre til sult.
- Den kan ikke låses eller låses opp fra en annen kontekst enn den som kjøpte den.
- Bare én tråd bør tillates i den kritiske delen om gangen.
- Den normale implementeringen kan føre til opptatt ventetilstand, noe som kaster bort CPU-tid.
Forskjell mellom Semaphore og Mutex
Basert på det jeg har lært å jobbe med dem, her er hvordan Mutexes og Semaphoreer forskjellig:
Parametre | Semaphore | mutex |
---|---|---|
Mekanisme | Det er en type signalmekanisme. | Det er en låsemekanisme. |
Data-type | Semaphore er en heltallsvariabel. | Mutex er bare et objekt. |
modifisering | Vente- og signaloperasjonene kan endre en semafor. | Den endres kun av prosessen som kan be om eller frigi en ressurs. |
Ressursforvaltning | Hvis ingen ressurs er ledig, krever prosessen en ressurs som skal utføre venteoperasjon. Den bør vente til tellingen av semaforen er større enn 0. | Hvis den er låst, må prosessen vente. Prosessen bør holdes i kø. Dette må kun åpnes når mutexen er låst opp. |
Tråd | Du kan ha flere programtråder. | Du kan ha flere programtråder i mutex, men ikke samtidig. |
Eierskap | Verdien kan endres ved en hvilken som helst prosess som frigir eller henter ressursen. | Objektlås frigjøres bare av prosessen som har fått låsen på den. |
Typer | Typer av Semaphore er tellende semafor og binær semafor. | Mutex har ingen undertyper. |
Operasjon | Semaphore verdien endres ved å bruke vente () og signal () operasjon. | Mutex-objektet er låst eller ulåst. |
Ressursbelegg | Den er opptatt hvis alle ressursene blir brukt og prosessen som ber om ressurs utfører vent () operasjon og blokkerer seg selv til semafortellingen blir >1. | Hvis objektet allerede er låst, venter prosessen som ber om ressurser og settes i kø av systemet før låsen frigjøres. |
Konklusjon
Etter min erfaring er nøkkelen til å velge mellom mutexes og semaforer å gjenkjenne deres operasjonelle nyanser. Semaphores er ideelle for komplekse synkroniseringer, mens mutexes er egnet for enkle gjensidige ekskluderinger, og sikrer ressurssikkerhet i enklere sammenhenger.