Sobes.tech
Junior — Middle

Můžete vysvětlit princip fungování mutexu a jeho použití ve vícetřetových programech?

sobes.tech AI

Odpověď od AI

Mutual exclusion (Mutex) je synchronizační mechanismus, který se používá k zabránění současného přístupu více vláken ke sdílenému zdroji (například proměnné nebo souboru). Mutex zajišťuje, že v každém okamžiku může vlastnit zámek pouze jedno vlákno a vykonávat kritickou sekci kódu.

Princip fungování:

  • Vlákno se pokusí získat mutex před vstupem do kritické sekce.
  • Pokud je mutex volný, vlákno získá přístup a pokračuje.
  • Pokud je mutex obsazen jiným vláknem, aktuální vlákno se zablokuje a čeká na uvolnění.
  • Po dokončení práce s prostředkem vlákno uvolní mutex, což umožní ostatním vláknům pokračovat.

V Go je to implementováno pomocí typu sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()         // uzamčení mutexu
    counter++         // kritická sekce
    mu.Unlock()       // odemčení mutexu
}

Použití mutexu zabraňuje závodním podmínkám a zajišťuje správnost dat při paralelním provádění.