Sobes.tech
Junior

Jak w języku programowania (Go) wykryć, że wszystkie uruchomione goroutines zakończyły pracę i główny wątek może skorzystać z wyników?

sobes.tech AI

Odpowiedź od AI

W Go, aby śledzić zakończenie wszystkich uruchomionych gorutyn, zwykle używa się typu sync.WaitGroup. Pozwala to głównemu wątkowi czekać, aż wszystkie gorutiny zakończą wykonywanie.

Przykład użycia:

var wg sync.WaitGroup

wg.Add(3) // oczekujemy 3 gorutyn

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // sygnalizujemy zakończenie gorutiny
        // praca gorutiny
        fmt.Println("Gorutyna", id, "zakończona")
    }(i)
}

wg.Wait() // główny wątek blokuje się, aż licznik wg osiągnie 0
fmt.Println("Wszystkie gorutiny zakończone, można korzystać z wyników")

W ten sposób WaitGroup pozwala na synchronizację wykonania i gwarantuje, że wątek kontrolny będzie czekał na zakończenie wszystkich równoległych zadań.