Mutex vs Semaphore – Ero niiden välillä

Keskeinen ero Mutexin ja Semaphore

  • Mutex on lukitusmekanismi, kun taas Semaphore on signalointimekanismi
  • Mutex on vain esine Semaphore on kokonaisluku
  • Mutexilla ei ole alatyyppiä, kun taas semaforilla on kaksi tyyppiä: laskeva semafori ja binäärinen semafori.
  • Semaphore tukee odotus- ja signaalitoimintojen muokkaamista, kun taas Mutexia muokkaa vain prosessi, joka voi pyytää tai vapauttaa resurssin.
  • Semaphore arvoa muutetaan käyttämällä odotus- ()- ja signaali- ()-operaatioita, toisaalta Mutex-operaatiot lukitaan tai avataan.

Ero Mutexin ja Semaphore
Ero Mutexin ja Semaphore

Tässä olen analysoinut eroa Mutexin ja Semaphore ja arvioi kattavasti niiden edut ja haitat.

Yleisiä faktoja Mutexista ja Semaphore

Käytännön perusteella tässä on muutamia yleisiä faktoja Mutex vs Semaphore:

  • Vain yksi tehtävä voi saada mutexin. Siten mutexilla on omistusoikeus, ja vain omistaja voi vapauttaa sen.
  • Syyt mutexin ja semaforin käyttöön ovat erilaiset, ehkä niiden toteutuksen samankaltaisuuden vuoksi, mutexia kutsutaan binäärisemaforiksi.
  • Yksi hyvin tunnettu väärinkäsitys on, että Mutexes ja Semaphores ovat melkein samat, sillä ainoa ero on, että Mutex pystyy laskemaan yhteen, kun taas Semaphoreosaa laskea 0:sta N:ään.
  • Binaarisen semaforin ja mutexin välillä on aina epävarmuus. Saatat kuulla, että mutex on binäärinen semafori, mikä ei ole oikein.

Mikä on a Semaphore?

Semafori on yksinkertaisesti muuttuja, joka ei ole negatiivinen ja jaetaan säikeiden kesken. Semafori on signalointimekanismi, ja semaforissa odottava säie voidaan signaloida toisella säikeellä. Se käyttää kahta atomioperaatiota, 1) odottaa ja 2) signaali prosessin synkronointi.

A viestittää joko sallii tai estää pääsyn resurssiin, mikä riippuu siitä, miten se on määritetty.

Käyttö Semaphore

Yhden puskurin tapauksessa voimme jakaa 4 kilotavun puskurin neljään 1 kilotavun puskuriin. Semaphore voidaan liittää näihin neljään puskuriin. Tämän ansiosta käyttäjät ja tuottajat voivat työskennellä eri puskureissa samanaikaisesti.

Edut Semaphore

Käytännössäni tässä ovat semaforin käytön tärkeimmät positiiviset puolet:

  • Se sallii useamman kuin yhden säikeen pääsyn kriittiseen osaan
  • Semaphores ovat koneista riippumattomia.
  • Semaphores on toteutettu mikroytimen koneista riippumattomassa koodissa.
  • Ne eivät salli useiden prosessien pääsyä kriittiseen osioon.
  • Koska semaforissa on kiireinen odotusaikataulu, prosessiaikaa ja resursseja ei koskaan mene hukkaan.
  • Ne ovat koneriippumattomia, jotka tulisi ajaa mikroytimen koneriippumattomassa koodissa.
  • Ne mahdollistavat resurssien joustavan hallinnan.

Haitat Semaphores

Tässä ovat semaforin haitat, jotka olen kohdannut.

  • Yksi semaforin suurimmista rajoituksista on prioriteetin inversio.
  • Käyttöjärjestelmän on pidettävä track kaikista odotus- ja signaalisemaforin kutsuista.
  • Niiden käyttöä ei koskaan pakoteta, vaan se tapahtuu vain sopimuksella.
  • Välttääksesi umpikujan semaforissa, Odota ja Signal toiminnot on suoritettava oikeassa järjestyksessä.
  • Semaphore ohjelmointi on monimutkainen menetelmä, joten on mahdollisuuksia, että molemminpuolista poissulkemista ei saavuteta.
  • Se ei myöskään ole käytännöllinen menetelmä laajamittaiseen käyttöön, koska niiden käyttö johtaa modulaarisuuden menettämiseen.
  • Semaphore on alttiimpi ohjelmoijavirheille.
  • Se voi aiheuttaa umpikuja tai vastavuoroisen poissulkemisen rikkominen ohjelmointivirheen vuoksi.

Mikä on Mutex?

Mutexin täysi muoto on Mutual Exclusion Object. Se on erityinen binäärisemafori, jota käytetään jaetun resurssin pääsyn hallintaan. Se sisältää prioriteetin periytymismekanismin laajennetun prioriteetin inversio-ongelmien välttämiseksi. Sen avulla nykyiset korkeamman prioriteetin tehtävät voidaan pitää estettyinä mahdollisimman lyhyen ajan. Prioriteetin periytyminen ei kuitenkaan korjaa prioriteetin inversiota, vaan vain minimoi sen vaikutusta.

Mutexin käyttö

Mutex tarjoaa keskinäisen poissulkemisen, joka voi olla joko tuottaja tai kuluttaja, joka voi saada avaimen (mutex) ja jatkaa työtään. Niin kauan kuin tuottaja täyttää puskuria, käyttäjän on odotettava ja päinvastoin. Mutex lockissa vain yksi säie voi toimia koko puskurin kanssa koko ajan.

Mutexin edut

Havaintojeni perusteella tässä ovat Mutexin tärkeimmät edut:

  • Mutexet ovat vain yksinkertaisia ​​lukkoja, jotka on saatu ennen kriittiseen osioon siirtymistä ja sen vapauttamista.
  • Koska vain yksi lanka on sen kriittisessä osassa kerrallaan, kilpailuolosuhteita ei ole ja tiedot pysyvät aina yhdenmukaisina.

Mutexin haitat

Käytännössäni olen tunnistanut useita Mutexin haittoja.

  • Jos lanka saa lukon ja menee nukkumaan tai se ennaltaehkäisee, toinen lanka ei ehkä pysty liikkumaan eteenpäin. Tämä voi johtaa nälkään.
  • Sitä ei voi lukita tai avata eri kontekstista kuin se, joka sen hankki.
  • Vain yksi lanka tulisi sallia kriittiseen osioon kerrallaan.
  • Normaali toteutus voi johtaa kiireiseen odotustilaan, mikä tuhlaa CPU-aikaa.

Erotus Semaphore ja Mutex

Sen perusteella, mitä olen oppinut työskentelemään heidän kanssaan, tässä on kuinka Mutexes ja Semaphoreeroavat:

Semaphore vs Mutex
Semaphore vs Mutex
parametrit Semaphore muteksi
Mekanismi Se on eräänlainen signalointimekanismi. Se on lukitusmekanismi.
Tietotyyppi Semaphore on kokonaislukumuuttuja. Mutex on vain esine.
muutos Odotus- ja signaalitoiminnot voivat muokata semaforia. Sitä muokkaa vain prosessi, joka voi pyytää tai vapauttaa resurssin.
Resurssienhallinta Jos mikään resurssi ei ole vapaa, prosessi vaatii resurssin, jonka pitäisi suorittaa odotustoiminto. Sen pitäisi odottaa, kunnes semaforin määrä on suurempi kuin 0. Jos se on lukittu, prosessin on odotettava. Prosessi on pidettävä jonossa. Tätä on käytettävä vain, kun mutex on auki.
Kierre Sinulla voi olla useita ohjelmasäikeitä. Sinulla voi olla useita ohjelmasäikeitä mutexissa, mutta ei samanaikaisesti.
Omistus Arvoa voidaan muuttaa millä tahansa prosessilla vapauttamalla tai hankkimalla resurssi. Objektilukon vapauttaa vain prosessi, joka on saanut lukon siihen.
Tyypit Tyyppisiä Semaphore laskevat semaforin ja binaarisen semaforin. Mutexilla ei ole alatyyppejä.
OperaTUKSEN Semaphore arvoa muutetaan käyttämällä odotustoimintoa () ja signaalia (). Mutex-objekti on lukittu tai avattu.
Resurssit Käyttöaste Se on varattu, jos kaikki resurssit ovat käytössä ja resurssia pyytävä prosessi suorittaa odotustoiminnon () ja estää itsensä, kunnes semaforien määrästä tulee >1. Jos objekti on jo lukittu, resursseja pyytävä prosessi odottaa ja järjestelmä asettaa sen jonoon ennen kuin lukitus vapautetaan.

Yhteenveto

Kokemukseni mukaan avain valittaessa mutexien ja semaforien välillä on niiden toiminnallisten vivahteiden tunnistaminen. Semaphores ovat ihanteellisia monimutkaisiin synkronointiin, kun taas mutexit sopivat yksinkertaisiin vastavuoroisiin poissulkemiseen, mikä varmistaa resurssien turvallisuuden yksinkertaisemmissa yhteyksissä.

Tiivistä tämä viesti seuraavasti: