Mutex vs Semaphore: Hvad er forskellen?

Indholdsfortegnelse:

Anonim

Hvad er Semaphore?

Semafor er simpelthen en variabel, der er ikke-negativ og deles mellem tråde. En semafor er en signalmekanisme, og en tråd, der venter på en semafor, kan signaliseres af en anden tråd. Den bruger to atomoperationer, 1) ventetid og 2) signal til procssynkroniseringen.

En semafor tillader eller afviser enten adgang til ressourcen, hvilket afhænger af, hvordan den er konfigureret.

I denne vejledning lærer du:

  • Hvad er Mutex?
  • Brug af Semaphore
  • Brug af Mutex
  • Forskel mellem Semaphore vs. Mutex
  • Almindelige misforståelser om Mutex og Semaphore
  • Fordele ved Semaphore
  • Fordele ved Mutex
  • Ulempen ved semaforer
  • Ulemper ved Mutex

Hvad er Mutex?

Den fulde form for Mutex er gensidig udelukkelsesobjekt. Det er en særlig type binær semafor, der bruges til at kontrollere adgangen til den delte ressource. Det inkluderer en prioritetsarvemekanisme for at undgå udvidede prioritetsinversionsproblemer. Det gør det muligt at holde nuværende højere prioritetsopgaver i den blokerede tilstand i den kortest mulige tid. Prioritetsarv korrigerer imidlertid ikke prioritetsinversion, men minimerer kun dens virkning.

Nøgleforskel

  • Mutex er en låsemekanisme, mens Semaphore er en signalmekanisme
  • Mutex er bare et objekt, mens Semaphore er et heltal
  • Mutex har ingen undertype, mens Semaphore har to typer, som tæller semafor og binær semafor.
  • Semaphore understøtter ændring af ventetid og signaloperationer, mens Mutex kun ændres ved den proces, der muligvis anmoder om eller frigiver en ressource.
  • Semaforværdien ændres ved hjælp af ventetider () og signal () -operationer, på den anden side er Mutex-operationer låst eller låst op.

Brug af Semaphore

I tilfælde af en enkelt buffer kan vi adskille 4 KB-bufferen i fire 1 KB-buffere. Semafor kan associeres med disse fire buffere. Dette giver brugere og producenter mulighed for at arbejde på forskellige buffere på samme tid.

Brug af Mutex

En mutex giver gensidig udelukkelse, som enten kan være producent eller forbruger, der kan have nøglen (mutex) og fortsætte med deres arbejde. Så længe producenten udfylder buffer, skal brugeren vente og omvendt. I Mutex-lås kan hele tiden kun en enkelt tråd arbejde med hele bufferen.

Forskel mellem Semaphore vs. Mutex

Parametre Semafor Mutex
Mekanisme Det er en type signalmekanisme. Det er en låsemekanisme.
Datatype Semafor er en heltalsvariabel. Mutex er bare et objekt.
Modifikation Vent- og signaloperationerne kan ændre en semafor. Det ændres kun ved den proces, der muligvis anmoder om eller frigiver en ressource.
Ressourcestyring Hvis der ikke er nogen ressource fri, kræver processen en ressource, der skal udføre ventetid. Det skal vente, indtil optællingen af ​​semaforen er større end 0. Hvis den er låst, skal processen vente. Processen skal holdes i kø. Dette skal kun åbnes, når mutex er låst op.
Tråd Du kan have flere programtråde. Du kan have flere programtråde i mutex, men ikke samtidigt.
Ejendomsret Værdien kan ændres ved enhver proces, der frigiver eller skaffer ressourcen. Objektlås frigøres kun ved processen, som har fået låsen på den.
Typer Typer af semafor tæller semafor og binær semafor. Mutex har ingen undertyper.
Operation Semaforværdien ændres ved hjælp af ventetid () og signal (). Mutex-objekt er låst eller ulåst.
Ressourcer Belægning Det er optaget, hvis alle ressourcer bliver brugt, og processen, der anmoder om ressource, udfører vent () -operation og blokerer sig selv, indtil semafortællingen bliver> 1. Hvis objektet allerede er låst, venter processen, der anmoder om ressourcer, og står i kø i systemet, før låsen frigøres.

Almindelige fakta om Mutex og Semaphore

Her er nogle få almindelige fakta om Mutex og Semaphore:

  • Kun en opgave kan erhverve mutex. Så der er ejerskab forbundet med en mutex, og kun ejeren kan frigive mutex.
  • Årsagerne til at bruge mutex og semaphore er forskellige, måske på grund af lighed i deres implementering, ville en mutex blive omtalt som binær semaphore.
  • En meget kendt misforståelse er, at Mutexes og Semaphores er næsten ens, med den eneste forskel, at en Mutex er i stand til at tælle til 1, mens Semaphores er i stand til at tælle fra 0 til N.
  • Der er altid usikkerhed mellem binær semafor og mutex. Du kan høre, at en mutex er en binær semafor, hvilket ikke er korrekt.

Fordele ved Semaphore

Her er fordele / fordele ved at bruge Semaphore:

  • Det giver mere end en tråd adgang til det kritiske afsnit
  • Semaforer er maskinuafhængige.
  • Semaforer implementeres i mikrokernels maskinuafhængige kode.
  • De tillader ikke flere processer at komme ind i det kritiske afsnit.
  • Da der er travlt med at vente i semaforen, spilder der aldrig spild af procestid og ressourcer.
  • De er maskinuafhængige, som skal køres i mikrokernels maskinuafhængige kode.
  • De tillader fleksibel styring af ressourcer.

Fordele ved Mutex

Her er vigtige fordele / fordele ved Mutex

  • Mutexes er bare enkle låse, der opnås, inden de går ind i dens kritiske sektion og derefter frigiver den.
  • Da der kun er en tråd i det kritiske afsnit på et givet tidspunkt, er der ingen raceforhold, og data forbliver altid konsistente.

Ulempen ved semaforer

Her er ulemper / ulempe ved semafor

  • En af de største begrænsninger ved en semafor er prioritetsinversion.
  • Operativsystemet skal holde styr på alle opkald for at vente og signalere semafor.
  • Deres anvendelse håndhæves aldrig, men det er kun ved konvention.
  • For at undgå blokeringer i semaforen skal operationerne Vent og Signal udføres i den rigtige rækkefølge.
  • Semafor programmering er en kompleks metode, så der er chancer for ikke at opnå gensidig udelukkelse.
  • Det er heller ikke en praktisk metode til brug i stor skala, da deres anvendelse fører til tab af modularitet.
  • Semaphore er mere tilbøjelig til programmeringsfejl.
  • Det kan forårsage blokering eller krænkelse af gensidig udelukkelse på grund af programmeringsfejl.

Ulemper ved Mutex

Her er ulemper / ulempe ved Mutex

  • Hvis en tråd får en lås og går i dvale, eller den er forhindret, kan den anden tråd muligvis ikke bevæge sig fremad. Dette kan føre til sult.
  • Det kan ikke låses eller låses op fra en anden sammenhæng end den, der erhvervede det.
  • Kun en tråd skal være tilladt i det kritiske afsnit ad gangen.
  • Den normale implementering kan føre til optaget ventetilstand, som spilder CPU-tid.