Junior
Ce este WaitGroup în Go și pentru ce se folosește?
sobes.tech AI
Răspuns de la AI
WaitGroup este un mecanism de sincronizare în Go care permite așteptarea finalizării unui grup de goroutines.
Este utilizat pentru:
- Așteptarea finalizării tuturor goroutines înainte de a ieși din funcție sau program.
- Coordonarea muncii între mai multe goroutines.
Exemplu de utilizare:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Scade contorul la finalizarea goroutinei
fmt.Printf("Lucrătorul %d a început\n", id)
time.Sleep(time.Second) // Simulare de muncă
fmt.Printf("Lucrătorul %d a terminat\n", id)
}
func main() {
var wg sync.WaitGroup // Declarăm WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Crește contorul înainte de a porni fiecare goroutine
go worker(i, &wg)
}
wg.Wait() // Blochează execuția main până când contorul devine 0
fmt.Println("Toți lucrătorii au terminat")
}
Metode principale:
Add(delta int): Crește contorul intern alWaitGroupcudelta. Trebuie apelat înainte de a porni fiecare goroutine de urmărit.Done(): Scade contorul intern alWaitGroupcu 1. De obicei, se apelează cudeferîn interiorul goroutinei pentru a garanta reducerea chiar și în caz de panică.Wait(): Blochează goroutine-ul curent până când contorul intern alWaitGroupdevine 0.