Junior — Middle
Este posibil să se aplice mai multe mecanisme de blocare (Mutex) în interiorul aceleiași funcții în același timp?
sobes.tech AI
Răspuns de la AI
Da, în Go se pot folosi mai multe mutexuri (Mutex) în aceeași funcție în același timp. Acest lucru este frecvent atunci când trebuie protejate resurse diferite sau părți de date care nu sunt legate între ele. Esențial este să evitați blocajele reciproce (deadlock), când un mutex așteaptă eliberarea altuia, iar acesta din urmă așteaptă primul.
Exemplu de utilizare a mai multor mutexuri:
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// Lucru cu prima resursă
mu2.Lock()
defer mu2.Unlock()
// Lucru cu a doua resursă
}
Pentru a evita deadlock-urile, se recomandă să blocați întotdeauna mutexurile în aceeași ordine în toate locurile din cod.