Junior — Middle
Kaip garantuoti, kad visi paleisti gorutinai programoje bus užbaigti?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra įmontuoto būdo priversti užbaigti gorutinas iš išorės. Norint garantuoti, kad visos paleistos gorutinos bus užbaigtos, dažnai naudojama sinchronizacija su sync.WaitGroup.
Veikimo principas:
- Prieš paleidžiant kiekvieną gorutiną, kviečiama
wg.Add(1). - Gorutinos pabaigoje kviečiama
wg.Done(). - Pagrindinėje funkcijoje kviečiama
wg.Wait(), kuri blokuoja vykdymą, kol skaitiklis nepasieks nulio.
Pavyzdys:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// gorutinos darbas
}()
wg.Wait() // laukti, kol visos gorutinos bus užbaigtos
Šiuo būdu programa garantuoja, kad lauks visų gorutinų užbaigimo prieš tęsdama ar užbaigdama.