Junior — Middle
Kako garantovati da će sve pokrenute gorutine u programu biti završene?
sobes.tech АИ
Одговор од АИ
U jeziku Go ne postoji ugrađeni način za prisilno zatvaranje goroutine izvan nje. Da biste garantovali da će se sve pokrenute goroutine završiti, obično se koristi sinhronizacija pomoću sync.WaitGroup.
Princip rada:
- Pre pokretanja svake goroutine poziva se
wg.Add(1). - Na kraju goroutine poziva se
wg.Done(). - U glavnoj funkciji se poziva
wg.Wait(), koje blokira izvršenje dok brojač ne postane nula.
Primer:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// rad goroutine
}()
wg.Wait() // sačekajte da se sve goroutine završe
Na ovaj način, program garantuje da će sačekati završetak svih goroutine pre nego što nastavi ili se završi.