Mutex vs Semaphore - Erinevus nende vahel
Peamised erinevused Mutexi ja Semaphore
- Mutex on lukustusmehhanism, kusjuures Semaphore on signalisatsioonimehhanism
- Mutex on lihtsalt objekt Semaphore on täisarv
- Mutexil pole alamtüüpi, samas kui semaforil on kahte tüüpi: loendussemafor ja binaarne semafor.
- Semaphore toetab oote- ja signaalioperatsioonide muutmist, samas kui Mutexi muudab ainult protsess, mis võib ressurssi taotleda või vabastada.
- Semaphore väärtust muudetakse ooteoperatsioonide () ja signaali () abil, teisest küljest lukustatakse või avatakse Mutexi toimingud.

Siin olen analüüsinud erinevust Mutexi ja Semaphore ning hindab põhjalikult nende plusse ja miinuseid.
Levinud faktid Mutexi ja Semaphore
Minu praktika põhjal on siin mõned levinud faktid Mutex vs Semaphore:
- Mutexi saab omandada ainult üks ülesanne. Seega on mutexil omandiõigus ja ainult omanik saab selle vabastada.
- Muteksi ja semafori kasutamise põhjused on erinevad, võib-olla nende rakendamise sarnasuse tõttu nimetatakse muteksit binaarseks semaforiks.
- Üks väga tuntud eksiarvamus on, et Mutexes ja Semaphores on peaaegu samad, ainsa erinevusega on see, et Mutex on võimeline lugema 1-ni, samas kui Semaphoreoskab lugeda 0-st N-ni.
- Binaarse semafori ja mutexi vahel on alati ebakindlus. Võite kuulda, et mutex on binaarne semafor, mis pole õige.
Mis on a Semaphore?
Semafor on lihtsalt muutuja, mis ei ole negatiivne ja jagatud lõimede vahel. Semafor on signalisatsioonimehhanism ja semaforil ootavast niidist saab märku anda teine niit. See kasutab kahte aatomioperatsiooni, 1) ootamist ja 2) signaali protsesside sünkroonimine.
A semafoor kas lubab või keelab juurdepääsu ressursile, mis sõltub sellest, kuidas see on seadistatud.
Kasutamine Semaphore
Ühe puhvri puhul saame 4 KB puhvri eraldada neljaks 1 KB puhvriks. Semaphore saab seostada nende nelja puhvriga. See võimaldab kasutajatel ja tootjatel samaaegselt töötada erinevate puhvritega.
Eelised Semaphore
Minu praktikas on siin semafori kasutamise peamised positiivsed küljed:
- See võimaldab rohkem kui ühe lõime juurdepääsu kriitilisele jaotisele
- Semaphores on masinast sõltumatud.
- Semaphores on realiseeritud mikrokerneli masinast sõltumatus koodis.
- Need ei luba mitmel protsessil kriitilisse sektsiooni siseneda.
- Kuna semaforis on tihe ootegraafik, ei raisata kunagi protsessi aega ja ressursse.
- Need on masinast sõltumatud, mida tuleks käivitada mikrokerneli masinast sõltumatus koodis.
- Need võimaldavad ressursse paindlikult hallata.
Puudused Semaphores
Siin on semafori puudused, millega olen kokku puutunud.
- Semafori üks suurimaid piiranguid on prioriteedi inversioon.
- Operatsioonisüsteem peab jälgima kõiki ootekõnesid ja semafori signaali.
- Nende kasutamist ei jõustata kunagi, vaid see on ainult kokkuleppeline.
- Semaforis ummikseisu vältimiseks tuleb Oodata ja Signal toimingud tuleb sooritada õiges järjekorras.
- Semaphore programmeerimine on keeruline meetod, seega on tõenäoline, et vastastikust välistamist ei saavutata.
- Samuti ei ole see praktiline meetod suuremahuliseks kasutamiseks, kuna nende kasutamine viib modulaarsuse kadumiseni.
- Semaphore on rohkem altid programmeerija vigadele.
- See võib põhjustada ummikseis või vastastikuse välistamise rikkumine programmeerija vea tõttu.
Mis on Mutex?
Mutexi täisvorm on Mutual Exclusion Object. See on spetsiaalne binaarne semafor, mida kasutatakse jagatud ressursi juurdepääsu kontrollimiseks. See sisaldab prioriteedi pärimise mehhanismi, et vältida laiendatud prioriteedi inversiooni probleeme. See võimaldab hoida praeguseid kõrgema prioriteediga ülesandeid võimalikult lühikese aja jooksul blokeeritud olekus. Kuid prioriteetne pärimine ei paranda prioriteedi inversiooni, vaid ainult minimeerib selle mõju.
Mutexi kasutamine
Mutex pakub vastastikust välistamist, milleks võib olla kas tootja või tarbija, kellel on võti (mutex) ja kes saab oma tööd jätkata. Kuni tootja täidab puhvrit, peab kasutaja ootama ja vastupidi. Mutex lockis saab kogu puhvriga kogu aeg töötada ainult üks lõim.
Mutexi eelised
Selle põhjal, mida ma olen täheldanud, on siin Mutexi peamised eelised:
- Mutexid on lihtsalt lihtsad lukud, mis saadakse enne selle kriitilise osa sisenemist ja seejärel selle vabastamist.
- Kuna kriitilises osas on igal ajahetkel ainult üks lõim, pole võistlustingimusi ja andmed jäävad alati järjepidevaks.
Mutexi puudused
Oma praktikas olen tuvastanud mitmeid Mutexi miinuseid.
- Kui niit saab lukustuse ja läheb magama või seda ennetatakse, ei pruugi teine niit edasi liikuda. See võib põhjustada nälgimist.
- Seda ei saa lukustada ega avada teisest kontekstist kui see, mis selle omandas.
- Kriitilises osas peaks korraga olema lubatud ainult üks lõng.
- Tavaline rakendamine võib viia hõivatud ooteolekuni, mis raiskab protsessori aega.
Erinevus Semaphore ja Mutex
Nendega töötades õpitu põhjal on Mutexesi ja Semaphores erinevad:
parameetrid | Semaphore | mutexid |
---|---|---|
Mehhanism | See on teatud tüüpi signaalimismehhanism. | See on lukustusmehhanism. |
Andmetüüp | Semaphore on täisarvuline muutuja. | Mutex on lihtsalt objekt. |
Muudatus | Ootamise ja signaali toimingud võivad semafori muuta. | Seda muudab ainult protsess, mis võib ressurssi taotleda või vabastada. |
Ressursside juhtimine | Kui ükski ressurss pole vaba, nõuab protsess ressurssi, mis peaks käivitama ootetoimingu. See peaks ootama, kuni semaforide arv on suurem kui 0. | Kui see on lukus, peab protsess ootama. Protsessi tuleks hoida järjekorras. Sellele on vaja juurde pääseda ainult siis, kui mutex on lukustamata. |
Keere | Teil võib olla mitu programmilõimi. | Mutexis võib olla mitu programmilõimi, kuid mitte korraga. |
Omandiõigus | Väärtust saab muuta mis tahes ressursi vabastamise või hankimise protsessiga. | Objekti lukustus vabastatakse ainult protsessi abil, mis on selle luku saanud. |
Liigid | Tüübid Semaphore loevad semafori ja kahendsemafori. | Mutexil pole alatüüpe. |
Operamine | Semaphore väärtust muudetakse ootamise () ja signaali () abil. | Mutexi objekt on lukustatud või lukustamata. |
Ressursid hõivatus | See on hõivatud, kui kõik ressursid on kasutusel ja ressurssi taotlev protsess sooritab ootetoimingu () ja blokeerib end, kuni semaforide arv muutub >1. | Juhul, kui objekt on juba lukustatud, ootab ressursse taotlev protsess ja süsteem seab selle järjekorda enne luku vabastamist. |
Järeldus
Minu kogemuse kohaselt on mutexide ja semaforide vahel valiku võti nende töönüansside äratundmine. Semaphores on ideaalsed keerukate sünkroonimiste jaoks, samas kui mutexid sobivad otseseks vastastikuseks välistamiseks, tagades ressursside ohutuse lihtsamas kontekstis.