Sobes.tech
Junior

Kaip programavimo kalboje (Go) nustatyti, kad visi vykdomi srautai baigėsi ir valdymo srautas gali naudotis rezultatais?

sobes.tech AI

Atsakymas iš AI

Go kalboje dažniausiai naudojamas sync.WaitGroup tipas, norint stebėti visų vykstančių gorutinių užbaigimą. Tai leidžia pagrindiniam srautui laukti, kol visi gorutinai užbaigs savo vykdymą.

Naudojimo pavyzdys:

var wg sync.WaitGroup

wg.Add(3) // laukiame 3 gorutinų

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // signalizuoja apie gorutinos pabaigą
        // gorutinos darbas
        fmt.Println("Gorutina", id, "baigta")
    }(i)
}

wg.Wait() // pagrindinis srautas blokuojasi, kol wg skaitiklis pasiekia 0
fmt.Println("Visos gorutinos baigtos, rezultatus galima naudoti")

Šiuo būdu WaitGroup leidžia sinchronizuoti vykdymą ir garantuoja, kad valdymo srautas lauks visų paralelinių užduočių pabaigos.