Sobes.tech
Junior — Middle

Ați folosit mecanismul de sincronizare cu sync.WaitGroup în proiectele dvs.?

sobes.tech AI

Răspuns de la AI

Da, în proiectele Go se folosește adesea sync.WaitGroup pentru sincronizarea gorutinelor. Acest mecanism permite așteptarea finalizării unui grup de sarcini paralele înainte de a continua.

Principiul de funcționare:

  • Se creează un obiect WaitGroup.
  • Înainte de a porni fiecare gorutină, se apelează Add(1) pentru a crește contorul.
  • În interiorul gorutinei, după finalizarea muncii, se apelează Done(), reducând contorul.
  • Gorutina principală apelează Wait(), care se blochează până când contorul ajunge la zero.

Exemplu:

var wg sync.WaitGroup

wg.Add(2) // așteptăm 2 gorutine

go func() {
    defer wg.Done()
    // munca primei gorutine
}()

go func() {
    defer wg.Done()
    // munca celei de-a doua gorutine
}()

wg.Wait() // așteptăm finalizarea ambelor

Acest lucru este util pentru coordonarea operațiilor paralele și prevenirea terminării premature a programului.