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.
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.
Proces práce s Mutexem má obvykle tři kroky:
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čí.
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. |
Č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.