mutex
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:
- Lock (Zamknutí): Vlákno požádá o přístup. Pokud je Mutex volný, vlákno ho získá a pokračuje. Pokud je obsazený, vlákno je „uspáno“ a čeká.
- Critical Section (Kritická sekce): Vlákno provádí operace se sdílenými daty (např. zápis do databáze).
- Unlock (Odemknutí): Vlákno uvolní Mutex, čímž dá signál operačnímu systému, že další čekající vlákno může pokračovat.
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:
- Mutex: Je binární (0 nebo 1). Je to „vlastněný“ zámek – pouze to vlákno, které ho zamklo, ho může odemknout.
- Semafor: Může mít hodnotu vyšší než 1 (např. dovolí vstup 5 vláknům najednou). Slouží spíše jako počítadlo volných kapacit.
Související pojmy: Thread (Vlákno), Race Condition, Deadlock, Synchronizace, Kritická sekce, Semafor.
mutex.txt · Poslední úprava: autor: admin
