Hva er Semaphore?
Semafor er ganske enkelt en variabel som ikke er negativ og deles 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 prosesssynkroniseringen.
En semafor tillater eller tillater ikke tilgang til ressursen, som avhenger av hvordan den er satt opp.
I denne opplæringen lærer du:
- Hva er Mutex?
- Bruk av Semaphore
- Bruk av Mutex
- Forskjellen mellom Semaphore og Mutex
- Vanlige misoppfatninger om Mutex og Semaphore
- Fordeler med Semaphore
- Fordeler med Mutex
- Ulempen med semaforer
- Ulemper med Mutex
Hva er Mutex?
Den fulle formen for Mutex er gjensidig eksklusjonsobjekt. Det er en spesiell type binær semafor som brukes til å kontrollere tilgangen til den delte ressursen. Den inkluderer en prioritert arvemekanisme for å unngå utvidede prioritetsinversjonsproblemer. Det gjør at nåværende oppgaver med høyere prioritet kan holdes i sperret tilstand på kortest mulig tid. Prioritetsarv korrigerer imidlertid ikke prioritetsinversjon, men minimerer bare effekten.
HOVEDFORSKJELL
- 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 Semaphore har to typer, som teller semafor og binær semafor.
- Semaphore støtter modifisering av venting og signaloperasjoner, mens Mutex bare modifiseres av prosessen som kan be om eller frigjøre en ressurs.
- Semaforverdien endres ved bruk av vent () og signal () -operasjoner, derimot er Mutex-operasjoner låst eller ulåst.
Bruk av Semaphore
Når det gjelder en enkelt buffer, kan vi skille 4 KB-bufferen i fire 1 KB-buffere. Semafor kan assosieres med disse fire bufferne. Dette tillater brukere og produsenter å jobbe på forskjellige buffere samtidig.
Bruk av Mutex
En mutex gir gjensidig utelukkelse, som enten kan være 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.
Forskjellen mellom Semaphore og Mutex
Parametere | Semafor | Mutex |
---|---|---|
Mekanisme | Det er en type signalmekanisme. | Det er en låsemekanisme. |
Data-type | Semafor er en heltallvariabel. | Mutex er bare et objekt. |
Modifikasjon | Ventetiden og signaloperasjonen kan endre en semafor. | Den endres bare av prosessen som kan be om eller frigjøre en ressurs. |
Ressursforvaltning | Hvis ingen ressurser er ledig, krever prosessen en ressurs som skal utføre ventetid. Det skal 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 trenger du bare å få tilgang til når mutex er låst opp. |
Tråd | Du kan ha flere programtråder. | Du kan ha flere programtråder i mutex, men ikke samtidig. |
Eie | Verdien kan endres ved enhver prosess som frigjør eller skaffer ressursen. | Objektlås frigjøres bare ved prosessen, som har fått låsen på den. |
Typer | Typer av semafor teller semafor og binær semafor. | Mutex har ingen undertyper. |
Operasjon | Semaforverdien modifiseres ved bruk av vent () og signal () -operasjon. | Mutex-objekt er låst eller ulåst. |
Ressurser Belegg | Det er opptatt hvis alle ressurser brukes og prosessen som ber om ressurs utfører vent () -operasjon og blokkerer seg til semafortelling blir> 1. | I tilfelle hvis objektet allerede er låst, venter prosessen som ber om ressurser og står i kø av systemet før låsen frigjøres. |
Vanlige fakta om Mutex og Semaphore
Her er noen vanlige fakta om Mutex og Semaphore:
- Bare en oppgave kan anskaffe mutex. Så det er eierskap knyttet til en mutex, og bare eieren kan frigjøre mutex.
- Årsakene til å bruke mutex og semafor er forskjellige, kanskje på grunn av likhet i implementeringen, vil en mutex 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 at en Mutex er i stand til å telle til 1, mens Semaphores kan 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.
Fordeler med Semaphore
Her er fordeler / fordeler ved å bruke Semaphore:
- Det gir mer enn en tråd tilgang til den kritiske delen
- Semaforer er maskinuavhengige.
- Semaforer er implementert i den maskinuavhengige koden til microkernel.
- De lar ikke flere prosesser komme inn i den kritiske delen.
- Siden det er travelt å vente 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.
Fordeler med Mutex
Her er viktige fordeler / fordeler 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 en tråd er i den kritiske delen til enhver tid, er det ingen løpsforhold, og data forblir alltid konsistente.
Ulempen med semaforer
Her er ulemper / ulempe med semafor
- En av de største begrensningene ved en semafor er prioritering inversjon.
- Operativsystemet må holde oversikt over alle samtaler for å vente og signalisere semafor.
- Bruken av dem blir aldri håndhevet, men det er kun ved konvensjon.
- For å unngå blokkeringer i semaforen, må operasjonene Vent og Signal utføres i riktig rekkefølge.
- Semaforeprogrammering er en kompleks metode, så det er sjanser for ikke å oppnå gjensidig utestenging.
- Det er heller ikke en praktisk metode for bruk i stor skala, da bruken av dem fører til tap av modularitet.
- Semaphore er mer utsatt for feil i programmerer.
- Det kan føre til låsing eller brudd på gjensidig utelukkelse på grunn av feil i programmereren.
Ulemper med Mutex
Her er ulemper / ulempe med Mutex
- Hvis en tråd får en lås og går i dvale eller den er forhindret, kan den andre tråden kanskje ikke bevege seg fremover. Dette kan føre til sult.
- Den kan ikke låses eller låses opp fra en annen kontekst enn den som fikk den.
- Bare en tråd skal tillates i den kritiske delen om gangen.
- Den normale implementeringen kan føre til opptatt ventetilstand, som kaster bort CPU-tid.