Perusero semaforin ja mutexin välillä on se, että semafori on signalointimekanismi eli prosessit suorittavat odotus () ja signaalin () toiminnon osoittamaan, ovatko ne hankkivat tai vapauttavat resurssin, kun taas Mutex on lukitusmekanismi, prosessin täytyy saada lukko mutex-objekti, jos se haluaa hankkia resurssin. Semaforin ja mutexin välillä on joitakin eroja, keskustelemme niistä alla olevan vertailukaavion avulla.
Vertailukaavio
Vertailun perusteet | viestittää | muteksi |
---|---|---|
perustiedot | Semafori on signalointimekanismi. | Mutex on lukitusmekanismi. |
Olemassaolo | Semafori on kokonaisluku muuttuja. | Mutex on objekti. |
Toimia | Semaphore sallii useiden ohjelmalankojen pääsyn rajalliseen resurssien esiintymiseen. | Mutex sallii useiden ohjelmalankojen pääsyn yhteen resurssiin, mutta ei samanaikaisesti. |
omistaminen | Semaforiarvoa voidaan muuttaa millä tahansa prosessilla, joka hankkii tai vapauttaa resurssin. | Mutex-objektilukko vapautetaan vain prosessilla, joka on lukinnut sen. |
Luokitella | Semaforia voidaan luokitella laskemiseen semaforiin ja binaariseen semaforiin. | Mutexia ei luokitella edelleen. |
Operaatio | Semaforiarvoa muutetaan käyttämällä odotus () - ja signaalitoimintoa (). | Mutex-objekti lukitaan tai avataan resurssia pyytävän tai vapauttavan prosessin avulla. |
Käytetyt resurssit | Jos kaikkia resursseja käytetään, resurssin pyytävä prosessi suorittaa odotus () -toiminnon ja estää itsensä, kunnes semaforiluku on suurempi kuin yksi. | Jos mutex-objekti on jo lukittu, resursseja pyytävä prosessi odottaa ja jonottaa järjestelmä, kunnes lukko vapautetaan. |
Semaforin määritelmä
Semafori on prosessin synkronointityökalu. Semafori on tyypillisesti kokonaisluku muuttuja S, joka alustetaan järjestelmässä olevien resurssien lukumäärään, ja semaforin arvoa voidaan muokata vain kahdella funktiolla odottaa () ja signaalia () alustamisen lisäksi.
Odotus () ja signaali () muokkaavat semaforin arvoa erottamattomasti . Se tarkoittaa, että kun prosessi muuttaa semaforin arvoa, mikään muu prosessi ei voi samanaikaisesti muuttaa semaforin arvoa. Semafori erottuu käyttöjärjestelmästä kahteen luokkaan: Semaforien ja binaarisen semaforin laskeminen .
Lukemisen semaforissa semafori S -arvo alustetaan järjestelmässä olevan resurssin lukumäärään . Aina kun prosessi haluaa käyttää resurssia, se suorittaa odotus () -toiminnon semaforilla ja pienentää semaforin arvoa yhdellä. Kun se vapauttaa resurssin, se suorittaa signaalin () operaation semaforissa ja kasvattaa semaforin arvoa yhdellä. Kun semaforilukema menee 0: een, se tarkoittaa, että kaikki resurssit ovat prosessien käytössä. Jos prosessissa on käytettävä resurssia, kun semaforilukema on 0, se suorittaa odotusajan () ja estää sen, kunnes semaforin arvo on suurempi kuin 0.
Binaarisessa semaforissa semaforin arvo vaihtelee välillä 0 ja 1 . Se on samanlainen kuin mutex-lukko, mutta mutex on lukitusmekanismi, kun taas semafori on signalointimekanismi. Binaarisessa semaforissa, jos prosessi haluaa käyttää resurssia, se suorittaa odotus () -toiminnon semaforilla ja pienentää semaforin arvoa arvosta 1 - 0. Kun se vapauttaa resurssin, se suorittaa signaalin () operaation semaforilla ja lisäyksillä sen arvo arvoon 1. Jos semaforin arvo on 0 ja prosessi haluaa käyttää resurssia, jota se suorittaa, odottaa () -toimintoa ja estää sen, kunnes nykyinen resursseja hyödyntävä prosessi vapauttaa resurssin.
Määritelmä Mutex
Keskinäisen poissulkemisen objekti kutsutaan lähiaikoina nimellä Mutex. Keskinäisen syrjäytymisen käsitteestä voimme ymmärtää, että vain yksi prosessi kerrallaan voi käyttää tiettyä resurssia. Mutex-objekti sallii useiden ohjelmalankojen käyttää samaa resurssia, mutta yksi kerrallaan, ei samanaikaisesti.
Kun ohjelma käynnistyy, se pyytää järjestelmää luomaan mutex-objektin tietylle resurssille. Järjestelmä luo mutex-objektin, jolla on yksilöllinen nimi tai tunnus. Aina kun ohjelmalanka haluaa käyttää resurssia, jossa se lukitsee mutex-objektin, käyttää resurssia ja sen jälkeen se vapauttaa mutex-objektin lukon. Sitten seuraava prosessi saa hankkia mutex-objektin lukon.
Samaan aikaan prosessi on hankkinut lukituksen mutex-objektiin, eikä mikään muu säiettä / prosessi voi käyttää tätä resurssia. Jos mutex-objekti on jo lukittu, prosessin, jossa halutaan hankkia lukitus mutex-objektissa, on odotettava ja järjestelmä on jonossa, kunnes mutex-objekti avataan.
Semaforin ja Mutexin väliset keskeiset erot
- Semafori on signalointimekanismi kuin odotus () ja signaalin () toiminta, joka suoritetaan semaforimuuttujalle ilmaisee, onko prosessi hankkimassa resurssin tai vapauttaa resurssin. Toisaalta mutex on lukitusmekanismi, sillä resurssin hankkimiseksi prosessin täytyy lukita mutex-objekti ja samalla vapautettaessa resurssiprosessi on avattava mutex-objekti.
- Semafori on tyypillisesti kokonaisluku muuttuja, kun taas mutex on objekti .
- Semaphore sallii useiden ohjelmalankojen pääsyn resurssien rajalliseen esiintymään . Toisaalta Mutex mahdollistaa useiden ohjelmalankojen pääsyn yhteen jaettuun resurssiin, mutta yksi kerrallaan.
- Semaforimuuttuja-arvoa voidaan muuttaa millä tahansa prosessilla, joka hankkii tai vapauttaa resurssia suorittamalla odotus () ja signaali (). Toisaalta mutex-objektista hankittu lukko voidaan vapauttaa vain prosessilla, joka on hankkinut lukituksen mutex-objektissa.
- Semafori on kahdentyyppinen laskenta-semafori ja binaarinen semafori, joka on melko samanlainen kuin mutex.
- Semaphore-muuttujan arvoa modifioidaan odotus () ja signaali () -toiminnolla alustamisen lisäksi. Kuitenkin mykistysobjekti lukitaan tai avataan resurssia hankkivan tai vapauttavan prosessin avulla.
- Jos prosessi hankkii kaikki resurssit, eikä mikään resurssi ole vapaa, prosessi, joka haluaa hankkia resurssia, odottaa () operaatiota semaforimuuttujaan ja estää itsensä, kunnes semaforin määrä on suurempi kuin 0. Mutta jos mutex-objekti on jo lukittu, niin prosessi, joka haluaa hankkia resurssia, odottaa ja saa jonotuksen järjestelmään, kunnes resurssi vapautetaan ja mutex-objekti avataan.
johtopäätös:
Semafori on parempi vaihtoehto, jos käytettävissä on useita resursseja. Yksittäisen jaetun resurssin tapauksessa mutex on parempi valinta.