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