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.