Mutex vs Semaphore: Aký je rozdiel?

Obsah:

Anonim

Čo je Semafor?

Semafor je jednoducho premenná, ktorá nie je negatívna a je zdieľaná medzi vláknami. Semafor je signalizačný mechanizmus a vlákno, ktoré čaká na semafore, môže byť signalizované iným vláknom. Využíva dve atómové operácie, 1) čakací a 2) signál na synchronizáciu procesu.

Semafor buď povoľuje, alebo zakazuje prístup k prostriedku, čo závisí od spôsobu jeho nastavenia.

V tomto návode sa dozviete:

  • Čo je Mutex?
  • Využitie Semaforu
  • Používanie Mutexu
  • Rozdiel medzi Semaforom a Mutexom
  • Bežné mylné predstavy o Mutexe a Semafore
  • Výhody semaforu
  • Výhody Mutexu
  • Nevýhoda Semaforov
  • Nevýhody Mutexu

Čo je Mutex?

Plná forma Mutexu je objekt vzájomného vylúčenia. Je to špeciálny typ binárneho semaforu, ktorý sa používa na riadenie prístupu k zdieľanému prostriedku. Zahŕňa mechanizmus prioritného dedenia, aby sa zabránilo problémom s inverziou prioritnej priority. Umožňuje udržanie aktuálnych úloh s vyššou prioritou v blokovanom stave po čo najkratší čas. Avšak prioritné dedičstvo neopravuje inverziu priority, ale iba minimalizuje jeho účinok.

KĽÚČOVÝ ROZDIEL

  • Mutex je blokovací mechanizmus, zatiaľ čo Semafor je signalizačný mechanizmus
  • Mutex je iba objekt, zatiaľ čo Semafor celé číslo
  • Mutex nemá žiadny podtyp, zatiaľ čo Semafor má dva typy, ktoré počítajú semafor a binárny semafor.
  • Semafor podporuje modifikáciu operácií čakania a signálu, zatiaľ čo program Mutex je upravovaný iba procesom, ktorý môže vyžadovať alebo uvoľniť zdroj.
  • Hodnota semaforu sa upravuje pomocou operácií wait () a signal (), na druhej strane sú operácie Mutex zamknuté alebo odomknuté.

Využitie Semaforu

V prípade jedinej medzipamäte môžeme rozdeliť 4 KB medzipamäť na štyri 1 KB medzipamäte. Semafor je možné spojiť s týmito štyrmi nárazníkmi. To umožňuje používateľom a producentom pracovať na rôznych vyrovnávacích pamätiach súčasne.

Používanie Mutexu

Mutex poskytuje vzájomné vylúčenie, ktorým môže byť buď výrobca, alebo spotrebiteľ, ktorí môžu mať kľúč (mutex) a pokračovať v práci. Pokiaľ výrobca vyplní vyrovnávaciu pamäť, musí používateľ čakať, a naopak. V zámku Mutex vždy môže pracovať s celou vyrovnávacou pamäťou iba jedna niť.

Rozdiel medzi Semaforom a Mutexom

Parametre Semafor Mutex
Mechanizmus Je to druh signalizačného mechanizmu. Je to uzamykací mechanizmus.
Dátový typ Semafor je celočíselná premenná. Mutex je iba objekt.
Úprava Operácie čakania a signálu môžu upraviť semafor. Je upravený iba procesom, ktorý môže požadovať alebo uvoľniť zdroj.
Riadenie zdrojov Ak žiadny zdroj nie je zadarmo, potom proces vyžaduje zdroj, ktorý by mal vykonať čakaciu operáciu. Mal by počkať, kým počet semaforov nebude väčší ako 0. Ak je zamknutá, proces musí čakať. Tento proces by mal byť vedený v rade. K tomuto je potrebné pristupovať, len keď je odomknutý mutex.
Závit Môžete mať viac vlákien programu. V mutexe môžete mať viac vlákien programu, ale nie súčasne.
Vlastníctvo Hodnotu je možné zmeniť akýmkoľvek procesom, ktorý uvoľní alebo získa zdroj. Zámok objektu sa uvoľní iba procesom, ktorý získal zámok na ňom.
Typy Typy semaforu sú počítanie semaforov a binárnych semaforov. Mutex nemá žiadne podtypy.
Prevádzka Hodnota semaforu sa upravuje pomocou čakania () a signálu (). Objekt Mutex je zamknutý alebo odomknutý.
Obsadenosť zdrojov Obsadí sa, ak sa používajú všetky zdroje a proces požadujúci zdroj vykoná operáciu wait () a sám sa zablokuje, kým sa počet semaforov nestane> 1. V prípade, že je objekt už uzamknutý, proces požadujúci prostriedky čaká a je v systéme zaradený do fronty pred uvoľnením zámku.

Všeobecné fakty o Mutexe a Semafore

Tu uvádzame niekoľko bežných faktov o Mutexe a Semafore:

  • Mutex môže získať iba jedna úloha. S mutexom je teda spojené vlastníctvo a mutex môže uvoľniť iba jeho vlastník.
  • Dôvody použitia mutexu a semaforu sú rôzne, možno kvôli podobnosti pri ich implementácii by sa mutex označoval ako binárny semafor.
  • Jedna veľmi známa mylná predstava je, že Mutexy a Semafory sú takmer rovnaké, iba s tým rozdielom, že Mutex je schopný počítať do 1, zatiaľ čo Semafory sú schopné počítať od 0 do N.
  • Medzi binárnym semaforom a mutexom vždy existuje neistota. Môžete počuť, že mutex je binárny semafor, čo nie je správne.

Výhody semaforu

Tu sú výhody a výhody použitia Semaphore:

  • Umožňuje viac ako jednému vláknu prístup do kritickej sekcie
  • Semafory sú nezávislé od strojov.
  • Semafory sú implementované do strojovo nezávislého kódu mikrojadra.
  • Nedovolia viacerým procesom vstúpiť do kritickej sekcie.
  • Pretože v semafore je veľa práce s čakaním, nikdy nedochádza k plytvaniu procesným časom a prostriedkami.
  • Sú nezávislé od stroja, ktoré by sa mali spúšťať v strojovo nezávislom kóde mikrojadra.
  • Umožňujú flexibilné riadenie zdrojov.

Výhody Mutexu

Tu sú dôležité výhody a výhody Mutexu

  • Mutexy sú iba jednoduché zámky získané pred vstupom do jeho kritickej časti a následným uvoľnením.
  • Pretože v danom okamihu je v kritickej sekcii iba jedno vlákno, neexistujú žiadne rasové podmienky a údaje vždy zostávajú konzistentné.

Nevýhoda Semaforov

Tu sú nevýhody / nevýhody semaforu

  • Jedným z najväčších obmedzení semaforu je prioritná inverzia.
  • Operačný systém musí sledovať všetky hovory, aby čakal a signalizoval semafor.
  • Ich použitie sa nikdy nevynucuje, ale je to len na základe konvencie.
  • Aby sa zabránilo zablokovaniu v semafore, je potrebné vykonať operácie Wait a Signal v správnom poradí.
  • Semaforové programovanie je zložitá metóda, takže existuje šanca, že sa nedosiahne vzájomné vylúčenie.
  • Nie je to ani praktická metóda pre veľké použitie, pretože ich použitie vedie k strate modularity.
  • Semafor je náchylnejší na chyby programátora.
  • Môže to spôsobiť zablokovanie alebo porušenie vzájomného vylúčenia v dôsledku chyby programátora.

Nevýhody Mutexu

Tu sú nevýhody / nevýhody Mutexu

  • Ak vlákno získa zámok a prejde do režimu spánku alebo je to predvídané, nemusí sa druhé vlákno pohybovať vpred. To môže viesť k hladu.
  • Nedá sa zamknúť alebo odomknúť z iného kontextu, ako je ten, ktorý ho získal.
  • V kritickej sekcii by malo byť súčasne povolené iba jedno vlákno.
  • Normálna implementácia môže viesť k zaneprázdnenému čakajúcemu stavu, ktorý stráca čas CPU.