Odporúčaná, 2019

Redakcia Choice

Rozdiel medzi semaforom a mutexom

Synchronizácia procesov zohráva dôležitú úlohu pri zachovaní konzistentnosti zdieľaných údajov. Na riešenie problému kritických častí sú prítomné softvérové ​​a hardvérové ​​riešenia. Ale hardvérové ​​riešenia pre problém kritickej časti sú pomerne ťažké implementovať. V dnešnom článku sa budeme zaoberať dvomi softvérovými riešeniami na riešenie problémov kritickej časti, napr. Semaphore a Mutexu.

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 porovnaniesemaformutex
základnéSemafor je signalizačný mechanizmus.Mutex je uzamykací mechanizmus.
existencieSemafor je celočíselná premenná.Mutex je objekt.
funkcieSemaphore 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íctvoHodnotu 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ácieHodnota 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

  1. 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.
  2. Semafor je typicky celočíselná premenná, zatiaľ čo mutex je objekt .
  3. 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.
  4. 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.
  5. Semaphore sú dva typy, ktoré počítajú semafor a binárny semafor, ktorý je celkom podobný mutexu.
  6. 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.
  7. 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.

Top