Sobes.tech
Junior — Middle

Je možné použiť viacero mechanizmov blokovania (Mutex) v rámci jednej funkcie naraz?

sobes.tech AI

Odpoveď od AI

Áno, v jazyku Go je možné používať viacero mutexov (Mutex) súčasne v jednej funkcii. Často sa to stáva, keď je potrebné chrániť rôzne zdroje alebo časti dát, ktoré nie sú medzi sebou prepojené. Hlavné je vyhýbať sa vzájomným zámkom (deadlock), keď jeden mutex čaká na uvoľnenie iného, a ten zase čaká na prvý.

Príklad použitia viacerých mutexov:

var mu1 sync.Mutex
var mu2 sync.Mutex

func updateResources() {
    mu1.Lock()
    defer mu1.Unlock()
    // Práca s prvým zdrojom

    mu2.Lock()
    defer mu2.Unlock()
    // Práca s druhým zdrojom
}

Aby sa predišlo deadlockom, odporúča sa vždy zamykať mutexy v rovnakom poradí na všetkých miestach v kóde.