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.