Sobes.tech
Junior

Jak v jazyce programování (Go) zjistit, že všechny spuštěné vlákna dokončila a hlavní vlákno může využít výsledky?

sobes.tech AI

Odpověď od AI

V jazyce Go se obvykle k sledování dokončení všech spuštěných gorutin používá typ sync.WaitGroup. Umožňuje hlavnímu vláknu čekat, dokud všechny gorutiny nedokončí svou činnost.

Příklad použití:

var wg sync.WaitGroup

wg.Add(3) // čekáme na 3 gorutiny

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // signalizuje dokončení gorutiny
        // práce gorutiny
        fmt.Println("Gorutina", id, "dokončena")
    }(i)
}

wg.Wait() // hlavní vlákno se zablokuje, dokud čítač wg nedosáhne 0
fmt.Println("Všechny gorutiny jsou dokončeny, lze použít výsledky")

Tímto způsobem WaitGroup umožňuje synchronizaci provádění a zajišťuje, že řídicí vlákno počká na dokončení všech paralelních úkolů.