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ń.