Sobes.tech
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.