Junior
Cum în limbajul de programare (Go) să detectezi că toate firele de execuție au terminat și firul principal poate folosi rezultatele?
sobes.tech AI
Răspuns de la AI
În Go, pentru a urmări finalizarea tuturor goroutine-urilor în curs, se folosește de obicei tipul sync.WaitGroup. Acesta permite thread-ului principal să aștepte până când toate goroutine-urile își încheie execuția.
Exemplu de utilizare:
var wg sync.WaitGroup
wg.Add(3) // așteptăm 3 goroutine-uri
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // semnalează finalizarea goroutine-ului
// lucrarea goroutine-ului
fmt.Println("Goroutine", id, "finalizată")
}(i)
}
wg.Wait() // thread-ul principal se blochează până când contorul wg devine 0
fmt.Println("Toate goroutine-urile au fost finalizate, rezultatele pot fi utilizate")
Astfel, WaitGroup permite sincronizarea execuției și garantează că thread-ul de control va aștepta finalizarea tuturor sarcinilor paralele.