Základným rozdielom medzi semaforom a mutexom je, že semafor je mechanizmus signalizácie, tj procesy vykonávajú funkciu čakania () a signálu (), ktoré indikujú, či získavajú alebo uvoľňujú zdroj, zatiaľ čo Mutex je uzamykací mechanizmus, proces musí získať zámok mutex objekt, ak chce získať zdroj. Existuje niekoľko rozdielov medzi semaforom a mutexom, diskutujme ich pomocou porovnávacieho grafu zobrazeného nižšie.
Porovnávacia tabuľka
Základ pre porovnanie | semafor | mutex |
---|---|---|
základné | Semafor je signalizačný mechanizmus. | Mutex je uzamykací mechanizmus. |
existencie | Semafor je celočíselná premenná. | Mutex je objekt. |
funkcie | Semaphore umožňujú viacerým programovým vláknam prístup k konečným prípadom zdrojov. | Mutex umožňuje viacerým programovým vláknam prístup k jednotlivým zdrojom, ale nie súčasne. |
vlastníctvo | Hodnotu semaforu je možné zmeniť akýmkoľvek procesom získavajúcim alebo uvoľneným zdrojom. | Zámok objektu Mutex je uvoľnený iba procesom, ktorý naň získal zámok. |
triediť | Semaphore možno zaradiť do počítania semaforu a binárneho semaforu. | Mutex nie je ďalej kategorizovaný. |
operácie | Hodnota semaforu sa upravuje pomocou funkcie čakania () a signálu (). | Objekt Mutex je uzamknutý alebo odomknutý procesom vyžadujúcim alebo uvoľneným zdrojom. |
Zdroje obsadené | Ak sa používajú všetky zdroje, proces vyžadujúci zdroj vykonáva operáciu čakania () a zablokuje sa, kým sa počet semaforov nestane väčší ako jeden. | Ak už je objekt mutex uzamknutý, proces, ktorý požaduje zdroje, čaká a čaká v systéme až do uvoľnenia zámku. |
Definícia semaforu
Semaphore je nástroj na synchronizáciu procesov. Semafor je zvyčajne celočíselná premenná S, ktorá je inicializovaná na počet zdrojov prítomných v systéme a hodnota semaforu môže byť zmenená iba pomocou dvoch funkcií čakania () a signálu () okrem inicializácie.
Funkcia čakania () a signálu () upravujú hodnotu semaforu nedeliteľne . Znamená to, že keď proces upravuje hodnotu semaforu, žiadny iný proces nemôže súčasne zmeniť hodnotu semaforu. Semaphore sa vyznačujú operačným systémom v dvoch kategóriách Počítanie semaforov a binárneho semaforu .
Pri výpočte Semaphore sa hodnota S semaforu inicializuje na počet zdrojov s prítomných v systéme. Kedykoľvek proces chce získať prístup k prostriedku, vykonáva operáciu čakania () na semaforovi a znižuje hodnotu semaforu o jednu. Keď uvoľní zdroj, vykoná na semafore operáciu signal () a zvyšuje hodnotu semaforu o jednu. Keď sa počet semaforov zmení na 0, znamená to, že všetky procesy obsadzujú všetky zdroje. Ak proces potrebuje použiť zdroj, keď počet semaforov je 0, vykoná čakanie () a zablokuje sa, kým sa hodnota semaforu nestane vyššou ako 0.
V binárnom semafor sa hodnota semaforu pohybuje medzi 0 a 1 . Je podobný zámku mutexu, ale mutex je uzamykací mechanizmus, zatiaľ čo semafor je signalizačným mechanizmom. V binárnom semaforu, ak proces chce získať prístup k prostriedku, vykoná operáciu wait () na semaforovom stroji a znižuje hodnotu semaforu z 1 na 0. Keď uvoľní zdroj, vykoná operáciu signal () na semafore a prírastkoch jeho hodnota je 1. Ak je hodnota semaforu 0 a proces chcú získať prístup k prostriedku, vykoná operáciu wait () a zablokuje sa, kým súčasný proces využívajúci zdroje neuvoľní zdroj.
Definícia mutexu
Objekt vzájomného vylúčenia sa krátko označuje ako Mutex. Z termínu vzájomného vylúčenia môžeme pochopiť, že k danému prostriedku môže pristupovať len jeden proces naraz. Objekt mutex umožňuje viacerým programovým vláknam používať ten istý zdroj, ale nie vždy súčasne.
Keď sa program spustí, požiada systém o vytvorenie objektu mutex pre daný zdroj. Systém vytvorí objekt mutex s jedinečným menom alebo ID. Kedykoľvek chce vlákno programu použiť zdroj, ktorý zaberá zámok na mutexovom objekte, využíva zdroj a po jeho použití uvoľní zámok na mutexovom objekte. Potom je ďalší proces povolený na získanie zámku na mutexovom objekte.
Medzitým proces získal zámok na mutex objekte žiadny iný závit / proces nemôže získať prístup k tomuto zdroju. Ak už je objekt mutex uzamknutý, proces, ktorý si želá získať zámok na mutexovom objekte, musí čakať a systém je zaradený do frontu, kým sa objekt mutexu neodomkne.
Kľúčové rozdiely medzi semaforom a mutexom
- Semaphore je signalizačný mechanizmus, pretože funkcia čakania () a signal () vykonávaná na premennej semaforu indikuje, či proces získava zdroj alebo uvoľňuje zdroj. Na druhej strane mutex je uzamykací mechanizmus, ako získať zdroj, proces musí uzamknúť mutex objekt a pri uvoľňovaní procesu prostriedku musí odomknúť mutex objekt.
- Semafor je typicky celočíselná premenná, zatiaľ čo mutex je objekt .
- Semaphore umožňuje viacerým programovým vláknam prístup k konečným inštanciám zdrojov . Na druhej strane Mutex umožňuje viacerým programovým vláknam prístup k jedinému zdieľanému prostriedku, ale k jednému naraz.
- Hodnota premennej semaforu môže byť modifikovaná akýmkoľvek procesom, ktorý získava alebo uvoľňuje zdroj vykonaním funkcie wait () a signal (). Na ostatných rukách môže byť zámok získaný na objekte mutex uvoľnený iba procesom, ktorý získal zámok na mutexovom objekte.
- Semaphore sú dva typy, ktoré počítajú semafor a binárny semafor, ktorý je celkom podobný mutexu.
- Hodnota premennej semaforu sa upravuje pomocou funkcie čakania () a signálu () okrem inicializácie. Avšak stlmený objekt je uzamknutý alebo odomknutý tým, že proces získal alebo uvoľnil.
- Ak sú všetky procesné zdroje získané a žiadny zdroj nie je voľný, potom proces, ktorý chce nadobudnúť zdroj, vykoná operáciu wait () na semaforovej premennej a zablokuje sa, až sa počet semaforov stane väčším ako 0. Ale ak je objekt mutexu už uzamknutý potom proces, ktorý chce získať zdroj čaká a dostane sa do fronty systémom až do uvoľnenia zdroja a mutex objekt dostane odomknutý.
záver:
Semaphore je lepšou voľbou v prípade dostupnosti viacerých zdrojov. V prípade jediného zdieľaného zdroja je mutex lepšou voľbou.