Sobes.tech
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.