Mutex vs Semaphore - Forskel mellem dem

Nøgleforskel mellem Mutex og Semafor

  • Mutex er en låsemekanisme, mens Semaphore er en signalmekanisme
  • Mutex er bare et objekt, mens Semaphore er et heltal
  • Mutex har ingen undertype, hvorimod semafor har to typer: tælle semafor og binær semafor.
  • Semaphore understøtter vent og signal operationsmodifikation, hvorimod Mutex kun modificeres af den proces, der kan anmode om eller frigive en ressource.
  • Semaforværdien ændres ved hjælp af vent () og signal () operationer derimod Mutex operationer er låst eller oplåst.

Forskellen mellem Mutex og Semafor
Forskellen mellem Mutex og Semafor

Her har jeg analyseret forskellen mellem Mutex og Semaphore og vil grundigt evaluere deres fordele og ulemper.

Almindelige fakta om Mutex og Semafor

Dr.wing fra min praksis er her et par almindelige fakta om Mutex vs Semaphore:

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

Hvad er en semafor?

En semafor er simpelthen en variabel, der er ikke-negativ og deles mellem tråde. En semafor er en signaleringsmekanisme, og en tråd, der venter på en semafor, kan signaleres af en anden tråd. Den bruger to atomic operationer, 1) vent og 2) signal for behandle synchronisering.

A semafor enten tillader eller nægter adgang til ressourcen, hvilket afhænger af, hvordan den er sat op.

Brug af semafor

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

Fordele ved Semafor

I min praksis er her de vigtigste positive sider ved at bruge semafor:

  • Det giver mere end én tråd adgang til den kritiske sektion
  • Semaforer er maskinuafhængige.
  • Semaforer er implementeret i mikrokernens maskinuafhængige kode.
  • De tillader ikke, at flere processer kommer ind i den kritiske sektion.
  • Da der er en travl ventetid i semaforen, er der aldrig spild af procestid og ressourcer.
  • De er maskinuafhængige, som skal køres i mikrokernens maskinuafhængige kode.
  • De giver mulighed for fleksibel styring af ressourcer.

Ulemper ved semaforer

Her er ulemperne ved semafor, som jeg er stødt på.

  • En af de største begrænsninger ved en semafor er prioritetsinversion.
  • operating-systemet skal holde styr på alle opkald til at vente og signalere semafor.
  • Deres brug håndhæves aldrig, men det er kun ved konvention.
  • For at undgå deadlocks i semafor, Vent og signal operationer skal udføres i den rigtige rækkefølge.
  • Semaforprogrammering er en complex 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.
  • Semafor er mere tilbøjelig til programmørfejl.
  • Det kan forårsage deadlock eller overtrædelse af gensidig udelukkelse på grund af programmørfejl.

Hvad er Mutex?

Den fulde form for Mutex er gensidig udelukkelsesobjekt. Det er en speciel type binær semafor, som bruges til at kontrollere adgangen til den delte ressource. Det inkluderer en prioritetsarvsmekanisme for at undgå problemer med udvidet prioritetsinversion. Det gør det muligt at holde aktuelle opgaver med højere prioritet i blokeret tilstand i kortest mulig tid. Prioritetsarv korrigerer dog ikke prioritetsinversion, men minimerer kun dens effekt.

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 fylder buffer, skal brugeren vente og omvendt. I Mutex lock kan kun en enkelt tråd hele tiden fungere med det hele buffer.

Fordele ved Mutex

Fra hvad jeg har observeret, er her de vigtigste fordele ved Mutex:

  • Mutexes er blot simple låse, der opnås, før de går ind i dens kritiske sektion og derefter frigiver den.
  • Da kun én tråd er i sin kritiske sektion på et givet tidspunkt, er der ingen løbsbetingelser, og data forbliver altid konsistente.

Ulemper ved Mutex

I min praksis har jeg identificeret flere ulemper ved Mutex.

  • Hvis en tråd opnår en lås og går i dvale, eller den er foregrebet, kan den anden tråd muligvis ikke bevæge sig fremad. Dette kan føre til sult.
  • Den kan ikke låses eller låses op fra en anden kontekst end den, der erhvervede den.
  • Kun én tråd bør tillades i den kritiske sektion ad gangen.
  • Den normale implementering kan føre til travl ventetilstand, hvilket spilder CPU-tid.

Forskellen mellem Semafor og Mutex

Baseret på det, jeg har lært at arbejde med dem, kan du se, hvordan Mutexes og Semaforer adskiller sig:

Semafor vs Mutex
Semafor vs Mutex
parametre Semaphore mutex
Mechanism Det er en form for signaleringsmekanisme. Det er en låsemekanisme.
Datatype Semafor er en heltalsvariabel. Mutex er bare et objekt.
Ændring Ventetiden og signalet operationer kan ændre en semafor. Det ændres kun af den proces, der kan anmode om eller frigive en ressource.
Ressourcestyring Hvis ingen ressource er ledig, kræver processen en ressource, der skal udføres wait operation. Det bør vente, indtil antallet af semaforen er større end 0. Hvis den er låst, må processen vente. Processen skal holdes i kø. Dette skal kun tilgås, når mutex'en er låst op.
Tråd Du kan have flere programtråde. Du kan have flere programtråde i mutex, men ikke simultaneoalmindeligt.
Ejerskab Værdien kan ændres ved enhver proces, der frigiver eller henter ressourcen. Objektlås frigives kun af processen, som har opnået låsen på den.
Typer Typer af semafor er tælle semafor og binær semafor. Mutex har ingen undertyper.
Produktion Semaforværdien ændres ved hjælp af vent () og signal () operation. Mutex-objekt er låst eller ulåst.
Ressourcer Belægning Den er optaget, hvis alle ressourcer bliver brugt, og processen, der anmoder om ressource, udfører vent () operation og blokerer sig selv, indtil semaforantallet bliver >1. Hvis objektet allerede er låst, venter processen, der anmoder om ressourcer, og sættes i kø af systemet, før låsen frigives.

Konklusion

Efter min erfaring er nøglen til at vælge mellem mutexes og semaforer at genkende deres operanationale nuancer. Semaforer er ideelle til complex synchroniseringer, hvorimod mutexes er velegnede til ligetil gensidige udelukkelser, hvilket sikrer ressourcesikkerhed i enklere sammenhænge.