Sobes.tech
Junior — Middle

Lze současně v jedné funkci použít více mechanismů blokování (Mutex)?

sobes.tech AI

Odpověď od AI

Ano, v jazyce Go je možné současně používat více mutexů (Mutex) uvnitř jedné funkce. Často se to používá, když je třeba chránit různé zdroje nebo části dat, které spolu nesouvisí. Hlavní je vyhnout se vzájemným zámkům (deadlock), kdy jeden mutex čeká na uvolnění jiného, a ten zase čeká na první.

Příklad použití více mutexů:

var mu1 sync.Mutex
var mu2 sync.Mutex

func updateResources() {
    mu1.Lock()
    defer mu1.Unlock()
    // Práce s prvním zdrojem

    mu2.Lock()
    defer mu2.Unlock()
    // Práce s druhým zdrojem
}

Aby se předešlo deadlockům, doporučuje se vždy zamykat mutexy ve stejném pořadí na všech místech kódu.