Obsah

Mutex (Vzájemné vyloučení)

Mutex funguje jako digitální „zámek“. V prostředí multitaskingu, kde více vláken běží současně, zabraňuje Mutex vzniku kritických chyb, jako je Race Condition, tím, že serializuje přístup ke kritické části kódu.


Princip fungování (Analogie se záchodem)

Nejlepším způsobem, jak pochopit Mutex, je analogie s klíčem od toalety v restauraci:

1. V restauraci je pouze jedna toaleta (**sdílený zdroj**).
2. Kdo chce dovnitř, musí si na baru vzít jediný existující klíč (**Mutex**).
3. Jakmile je někdo uvnitř a má klíč, nikdo jiný se tam nedostane – ostatní musí počkat ve frontě.
4. Jakmile osoba toaletu opustí, vrátí klíč na bar.
5. Další osoba ve frontě si klíč vezme a může vstoupit.

Životní cyklus Mutexu v kódu

Proces práce s Mutexem má obvykle tři kroky:


Proč je Mutex nezbytný?

Bez Mutexu by mohlo dojít k poškození dat. Představte si bankovní aplikaci, kde dvě vlákna současně odečítají 100 Kč z účtu:

1. Vlákno A i B si přečtou zůstatek (např. 1000 Kč).
2. Obě vypočítají nový zůstatek (900 Kč).
3. Obě zapíšou 900 Kč.
4. **Výsledek:** Z účtu zmizelo jen 100 Kč místo 200 Kč, protože vlákna o sobě nevěděla. Mutex by zajistil, že Vlákno B začne pracovat až poté, co Vlákno A zápis dokončí.

Rizika spojená s Mutexy

Ačkoliv Mutexy chrání data, jejich nesprávné použití vede k problémům:

Problém Popis
Deadlock Dvě vlákna se navzájem zablokují, protože každé drží jeden Mutex a čeká na ten, který drží to druhé.
Starvation (Hladovění) Vlákno s nízkou prioritou se nikdy nedostane k Mutexu, protože ho neustále „předbíhají“ vlákna s vyšší prioritou.
Overhead Zamykání a odemykání spotřebovává čas procesoru. Příliš mnoho Mutexů může aplikaci výrazně zpomalit.

Rozdíl: Mutex vs. Semafor

Často dochází k záměně s pojmem Semafor. Hlavní rozdíl je v počtu:


Související pojmy: Thread (Vlákno), Race Condition, Deadlock, Synchronizace, Kritická sekce, Semafor.