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