Sobes.tech
Junior — Middle

Kā garantēt, ka visas izpildītās gorutīnas programmā tiks pabeigtas?

sobes.tech AI

Atbilde no AI

Go valodā nav iebūvēta veida, kā ārēji piespiest gorutinu pārtraukt. Lai garantētu, ka visas palaistās gorutinas tiks pabeigtas, parasti tiek izmantota sinhronizācija ar sync.WaitGroup.

Darbības princips:

  • Pirms katras gorutinas palaišanas tiek izsaukts wg.Add(1).
  • Gorutinas beigās tiek izsaukts wg.Done().
  • Galvenajā funkcijā tiek izsaukts wg.Wait(), kas bloķē izpildi līdz skaitītājs sasniedz nulli.

Piemērs:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // gorutinas darbs
}()

wg.Wait() // gaidīt, līdz visas gorutinas būs pabeigtas

Šādā veidā programma garantē, ka tā gaidīs visu gorutinu pabeigšanu pirms turpināšanas vai beigu.