Sobes.tech
Junior — Middle

Ce funcții oferă structura WaitGroup în limbajul Go pentru sincronizarea goroutine-urilor?

sobes.tech AI

Răspuns de la AI

În limbajul Go, structura sync.WaitGroup este utilizată pentru a sincroniza mai multe goroutine-uri, permițând goroutine-ului principal să aștepte finalizarea celorlalte.

Metodele principale ale WaitGroup:

  • Add(delta int) — crește sau scade contorul goroutine-urilor așteptate. De obicei, este apelată înainte de a porni goroutine-urile.

  • Done() — scade contorul cu 1, apelată la sfârșitul muncii goroutine-ului.

  • Wait() — blochează execuția până când contorul ajunge la zero.

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() // semnalăm finalizarea
        fmt.Println("Goroutine", id)
    }(i)
}

wg.Wait() // așteptăm finalizarea tuturor goroutine-urilor
fmt.Println("Toate goroutine-urile au fost finalizate")

Astfel, WaitGroup ajută la coordonarea execuției paralele și asigură că programul nu se va încheia mai devreme.