Junior — Middle
Cum se poate garanta finalizarea tuturor goroutine-urilor în execuție într-un program?
sobes.tech AI
Răspuns de la AI
În Go, nu există o modalitate încorporată de a încheia forțat o goroutine din exterior. Pentru a garanta că toate goroutine-urile în curs de execuție se vor termina, se folosește de obicei sincronizarea cu sync.WaitGroup.
Principiul de funcționare:
- Înainte de a porni fiecare goroutine, se apelează
wg.Add(1). - La sfârșitul goroutine-ului, se apelează
wg.Done(). - În funcția principală, se apelează
wg.Wait(), care blochează execuția până când contorul ajunge la zero.
Exemplu:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// lucrarea goroutine-ului
}()
wg.Wait() // așteaptă finalizarea tuturor goroutine-urilor
Astfel, programul va aștepta garantat finalizarea tuturor goroutine-urilor înainte de a continua sau de a se încheia.