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.