Põhiline erinevus semafori ja mutexi vahel on see, et semafor on signalisatsioonimehhanism ehk protsessid, mis viivad läbi ooterežiimi () ja signaali (), et näidata, kas nad omandavad või vabastavad ressursse, samas kui Mutex on lukustusmehhanism, protsess peab lukustama mutex objekt, kui ta soovib ressurssi hankida. Semafori ja mutexi vahel on veel rohkem erinevusi, arutleme neid allpool toodud võrdluskaardi abil.
Võrdluskaart
Võrdluse alus | Semafor | Mutex |
---|---|---|
Põhiline | Semafor on signaalimehhanism. | Mutex on lukustusmehhanism. |
Olemasolu | Semafor on täisarv muutuja. | Mutex on objekt. |
Funktsioon | Semafor võimaldab mitmetel programmilõnadel kasutada piiratud ressursside eksemplari. | Mutex võimaldab mitme programmi lõime juurdepääsu ühele ressursile, kuid mitte üheaegselt. |
Omand | Semafori väärtust saab muuta mis tahes protsessi abil, mis ressurssi omandab või vabastab. | Mutexi objekti lukustus vabastatakse ainult selle protsessi käigus, mis on selle lukustanud. |
Kategooriad | Semafori võib liigitada loendavaks semaforiks ja binaarseks semaforiks. | Mutexi ei liigitata edasi. |
Toimimine | Semafori väärtust muudetakse ooterežiimi () ja signaali () abil. | Mutexi objekt lukustatakse või vabastatakse ressursi taotlemise või vabastamise protsessist. |
Hõivatud ressursid | Kui kõik ressursid on kasutatavad, siis protsess, mis nõuab ressursi sooritamist, ootab () operatsiooni ja blokeerib ennast, kuni semaforide arv on suurem kui üks. | Kui mutexobjekt on juba lukustatud, ootab ja nõuab järjekorda ressursside taotlemise protsess, kuni lukk vabastatakse. |
Semafori mõiste
Semafor on protsesside sünkroniseerimise tööriist. Semafor on tavaliselt täisarvu muutuja S, mis lähtestatakse süsteemis olevate ressursside arvuga ja semafori väärtust saab muuta ainult kahe funktsiooni ootamise () ja signaaliga () peale initsialiseerimise.
Ootamise () ja signaali () töö muudab semafori väärtust lahutamatult . See tähendab, et kui protsess muudab semafori väärtust, ei saa ükski teine protsess samaaegselt semafori väärtust muuta. Semafori eristab operatsioonisüsteem kahes kategoorias: Semaforide ja binaarse semafori lugemine .
Semafori loendamisel lähtestatakse semafor S väärtus süsteemis olevate ressursside arvuga . Kui protsess soovib juurdepääsu ressursile, mida ta teeb, ootab () operatsiooni semaforil ja vähendab semafori väärtust ühe võrra. Kui ta vabastab ressursi, teeb ta semaforil signaali () ja suurendab semafori väärtust ühe võrra. Kui semaforiarv läheb 0-le, tähendab see, et kõik ressursid on protsesside poolt hõivatud. Kui protsess, mis peab kasutama ressurssi, kui semafori arv on 0, siis käivitab see ootamise () ja blokeerub seni, kuni semafori väärtus on suurem kui 0.
Binaarses semaforis on semafori väärtus vahemikus 0 kuni 1 . See on sarnane mutexi lukuga, kuid mutex on lukustusmehhanism, samas kui semafor on signaalimehhanism. Binaarses semaforis, kui protsess tahab pääseda ressursile, mida ta teeb, ootab () operatsiooni semaforil ja vähendab semafori väärtust 1-st 0. Kui ta vabastab ressursi, teostab ta semafori signaali () ja sammud selle väärtus väärtuseni 1. Kui semafori väärtus on 0 ja protsess soovib juurdepääsu ressursile, mida ta täidab, ootab () operatsiooni ja blokeerib ennast, kuni praegune protsess, mis kasutab ressursse, vabastab ressursi.
Mutexi määratlus
Vastastikuse välistamise objekti nimetatakse lühidalt Mutexiks. Mõistet „vastastikune tõrjutus” saame mõista, et antud ressursile on juurdepääs ainult ühel ajal. Mutexi objekt võimaldab mitme programmi lõime kasutada sama ressurssi, kuid ükshaaval mitte üheaegselt.
Kui programm käivitub, palutakse süsteemil luua mutex-objekt teatud ressursi jaoks. Süsteem loob mutexi objekti unikaalse nime või ID-ga. Kui programmi lõime soovib kasutada ressurssi, mida ta lukustab mutexi objektil, kasutab see ressurssi ja pärast kasutamist vabastab mutexi objekti luku. Seejärel lubatakse järgmisel protsessil lukustada mutexi objekt.
Vahepeal on protsess mutexi objekti lukust omandanud, kuid ükski teine niit / protsess ei pääse sellele ressursile juurde. Kui mutexobjekt on juba lukustatud, siis peab mutexi objekti lukustuse omandamise protsess ootama ja olema järjekorda seadnud, kuni mutexi objekt on lukustamata.
Semafori ja Mutexi vahelised peamised erinevused
- Semafor on signalisatsioonimehhanism kui ooteaja () ja signaal (), mis teostatakse semafori muutujaga, näitab, kas protsess omandab ressursi või vabastab ressursi. Teisest küljest on mutex lukustusmehhanism, kuna ressursi hankimiseks peab protsess lukustama mutexi objekti ja ressursiprotsessi vabastamisel peab avama mutexi objekti.
- Semafor on tavaliselt täisarv muutuja, samas kui mutex on objekt .
- Semafor võimaldab mitmetel programmilõikudel kasutada ressursside piiratud eksemplari . Teisest küljest võimaldab Mutex mitmele programmikeele pääseda ühele jagatud ressursile, kuid ükshaaval.
- Semafori muutuvväärtust saab muuta mis tahes protsessiga, mis omandab või vabastab ressursse ooterežiimi () ja signaali () toimimise abil. Teisest küljest saab mutexi objektil omandatud lukust vabastada ainult protsessiga, mis on mutexi objekti lukustanud.
- Semafor on kahte tüüpi lugedes semafori ja binaarset semaforit, mis on üsna sarnane mutexiga.
- Semafori muutuja väärtust modifitseeritakse ootamise () ja signaali () toiminguga peale initsialiseerimise. Kuid vaigistusobjekt lukustatakse või vabastatakse ressursi hankimise või vabastamise protsessist.
- Kui kõik ressursid on protsessi poolt omandatud ja ükski ressurss ei ole vaba, siis protsess, mis soovib omandada ressursi, täidab ootus () operatsiooni semafori muutujale ja blokeerib ennast, kuni semafori arv on suurem kui 0. Aga kui mutexobjekt on juba lukustatud, siis protsess, mis soovib omandada ressursi, ootab ja saadab süsteemi järjekorda, kuni ressurss vabaneb ja mutex objekt avaneb.
Järeldus:
Semafor on parem valik juhul, kui olemasolevaid ressursse on mitu. Ühe jagatud ressursi puhul on mutex parem valik.