Junior
Pentru ce este folosit WaitGroup în Go?
sobes.tech AI
Răspuns de la AI
WaitGroup este utilizat pentru a sincroniza munca unei sau mai multor goroutines. Permite goroutinei principale să aștepte finalizarea altor goroutines create. Este format dintr-un contor care crește atunci când se creează o goroutine și scade când aceasta se termină.
Metode principale:
Add(delta int): Crește sau scade contorul goroutines.Done(): Scade contorul cu 1. De obicei este apelat la sfârșitul unei goroutines (adesea cudefer).Wait(): Blochează execuția până când contorul devine zero.
Exemplu de utilizare:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Scade contorul la finalul goroutinei
fmt.Printf("Goroutine %d începe\n", id)
// Simulare de muncă
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d s-a terminat\n", id)
}
func main() {
var wg sync.WaitGroup // Creăm un WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Crește contorul pentru fiecare goroutine
go worker(i, &wg) // Pornește goroutine, transmitând pointerul către WaitGroup
}
wg.Wait() // Așteaptă până când contorul devine zero (toate goroutinele se termină)
fmt.Println("Toate goroutinele s-au terminat")
}