Mutex vs Semaphore: Jaký je rozdíl?

Obsah:

Anonim

Co je Semafor?

Semafor je jednoduše proměnná, která je nezáporná a sdílená mezi vlákny. Semafor je signalizační mechanismus a vlákno, které čeká na semaforu, může být signalizováno jiným vláknem. Využívá dvě atomové operace, 1) čekání a 2) signál pro synchronizaci procesu.

Semafor povoluje nebo zakazuje přístup k prostředku, což závisí na tom, jak je nastaven.

V tomto výukovém programu se naučíte:

  • Co je Mutex?
  • Použití semaforu
  • Použití Mutexu
  • Rozdíl mezi Semaforem a Mutexem
  • Časté mylné představy o Mutexu a Semaforu
  • Výhody semaforu
  • Výhody Mutexu
  • Nevýhoda semaforů
  • Nevýhody Mutexu

Co je Mutex?

Plná forma Mutexu je Mutual Exclusion Object. Jedná se o speciální typ binárního semaforu, který slouží k řízení přístupu ke sdílenému prostředku. Zahrnuje mechanismus dědičnosti priorit, aby se zabránilo problémům s inverzí rozšířené priority. Umožňuje udržovat aktuální úkoly s vyšší prioritou v blokovaném stavu po co nejkratší dobu. Prioritní dědičnost však neopravuje prioritní inverzi, ale pouze minimalizuje její účinek.

KLÍČOVÝ ROZDÍL

  • Mutex je zajišťovací mechanismus, zatímco Semaphore je signalizační mechanismus
  • Mutex je jen objekt, zatímco Semaphore je celé číslo
  • Mutex nemá žádný podtyp, zatímco Semafor má dva typy, které počítají semafor a binární semafor.
  • Semafor podporuje modifikaci operací čekání a signalizace, zatímco Mutex je upravován pouze procesem, který může požadovat nebo uvolnit prostředek.
  • Hodnota semaforu se upravuje pomocí operací wait () a signal (), na druhou stranu jsou operace Mutex zamčené nebo odemčené.

Použití semaforu

V případě jediné vyrovnávací paměti můžeme rozdělit 4 kB vyrovnávací paměť na čtyři 1 kB vyrovnávací paměti. Semafor může být spojen s těmito čtyřmi vyrovnávacími paměti. To umožňuje uživatelům a producentům pracovat na různých vyrovnávacích pamětí současně.

Použití Mutexu

Mutex poskytuje vzájemné vyloučení, což může být buď producent, nebo spotřebitel, který může mít klíč (mutex) a pokračovat v práci. Dokud výrobce vyplní vyrovnávací paměť, uživatel musí počkat a naopak. V zámku Mutex po celou dobu může s celou vyrovnávací pamětí pracovat pouze jedno vlákno.

Rozdíl mezi Semaforem a Mutexem

Parametry Semafor Mutex
Mechanismus Jedná se o typ signalizačního mechanismu. Jedná se o zajišťovací mechanismus.
Datový typ Semafor je celočíselná proměnná. Mutex je jen objekt.
Úpravy Operace čekání a signálu mohou upravit semafor. Je upraven pouze procesem, který může požadovat nebo uvolnit prostředek.
Správa zdrojů Pokud není žádný prostředek volný, vyžaduje tento proces prostředek, který by měl provést operaci čekání. Mělo by počkat, až bude počet semaforů větší než 0. Pokud je uzamčen, musí proces čekat. Proces by měl být veden ve frontě. K tomu je třeba přistupovat, pouze když je mutex odemčený.
Vlákno Můžete mít více podprocesů programu. V mutexu můžete mít více podprocesů programu, ale ne současně.
Vlastnictví Hodnotu lze změnit jakýmkoli procesem uvolňujícím nebo získávajícím zdroj. Zámek objektu je uvolněn pouze procesem, který zámek získal.
Typy Typy semaforu jsou počítání semaforu a binárního semaforu. Mutex nemá žádné podtypy.
Úkon Hodnota semaforu se upravuje pomocí operací wait () a signal (). Objekt Mutex je uzamčen nebo odemčen.
Obsazenost zdrojů Je obsazeno, pokud se používají všechny prostředky a proces požadující zdroj provede operaci wait () a sám se zablokuje, dokud se počet semaforů nestane> 1. V případě, že je objekt již uzamčen, proces vyžadující prostředky čeká a je systémem zařazen do fronty před uvolněním zámku.

Společná fakta o Mutexu a Semaforu

Zde je několik běžných faktů o Mutexu a Semaforu:

  • Pouze jeden úkol může získat mutex. K mutexu je tedy přidruženo vlastnictví a mutex může uvolnit pouze jeho vlastník.
  • Důvody pro použití mutexu a semaforu jsou různé, možná kvůli podobnosti při jejich implementaci by se mutex označoval jako binární semafor.
  • Jedna velmi známá mylná představa je, že Mutexy a Semafory jsou téměř stejné, pouze s tím rozdílem, že Mutex je schopen počítat do 1, zatímco Semafory schopné počítat od 0 do N.
  • Mezi binárním semaforem a mutexem vždy existuje nejistota. Možná uslyšíte, že mutex je binární semafor, což není správné.

Výhody semaforu

Zde jsou výhody / výhody používání Semaphore:

  • Umožňuje více než jednomu vláknu přístup do kritické sekce
  • Semafory jsou nezávislé na strojích.
  • Semafory jsou implementovány do strojově nezávislého kódu microkernel.
  • Nepovolují více procesům vstoupit do kritické sekce.
  • Jelikož na semaforu čeká hodně práce, nikdy nedojde k plýtvání časem a zdroji.
  • Jsou nezávislé na stroji, který by měl být spuštěn v strojově nezávislém kódu mikrokernelu.
  • Umožňují flexibilní správu zdrojů.

Výhody Mutexu

Zde jsou důležité výhody / výhody Mutexu

  • Mutexy jsou jen jednoduché zámky získané před vstupem do jeho kritické části a následným uvolněním.
  • Vzhledem k tomu, že v daném okamžiku je v jeho kritické části pouze jedno vlákno, neexistují žádné podmínky závodu a data vždy zůstávají konzistentní.

Nevýhoda semaforů

Zde jsou nevýhody / nevýhoda semaforu

  • Jedním z největších omezení semaforu je prioritní inverze.
  • Operační systém musí sledovat všechny hovory, aby čekal a signalizoval semafor.
  • Jejich použití není nikdy vynuceno, ale je to pouze na základě konvence.
  • Aby se zabránilo zablokování v semaforu, je nutné provést operace Wait a Signal ve správném pořadí.
  • Semaforové programování je složitá metoda, takže existuje šance, že nedojde k vzájemnému vyloučení.
  • Také to není praktická metoda pro použití ve velkém měřítku, protože jejich použití vede ke ztrátě modularity.
  • Semafor je náchylnější k chybě programátoru.
  • Může to způsobit zablokování nebo narušení vzájemného vyloučení kvůli chybě programátoru.

Nevýhody Mutexu

Zde jsou nevýhody / nevýhoda Mutexu

  • Pokud vlákno získá zámek a přejde do režimu spánku nebo je preempted, pak se druhé vlákno nemusí pohybovat vpřed. To může vést k hladovění.
  • Nelze jej zamknout nebo odemknout z jiného kontextu, než z kterého jej získal.
  • V kritické sekci by mělo být povoleno vždy pouze jedno vlákno.
  • Normální implementace může vést k zaneprázdněnému čekajícímu stavu, což ztrácí čas CPU.