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