Junior
Na čo slúži WaitGroup v Go?
sobes.tech AI
Odpoveď od AI
WaitGroup sa používá k synchronizaci práce jedné nebo více gorutin. Umožňuje hlavní gorutině čekat na dokončení ostatních vytvořených gorutin. Skládá se z čítače, který se zvyšuje při vytváření gorutiny a snižuje při jejím dokončení.
Hlavní metody:
Add(delta int): Zvyšuje nebo snižuje čítač gorutin.Done(): Snižuje čítač o 1. Obvykle se volá na konci gorutiny (často sdefer).Wait(): Blokuje provádění, dokud čítač nedosáhne nuly.
Příklad použití:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Snižuje čítač na konci gorutiny
fmt.Printf("Goroutine %d začíná\n", id)
// Simulace práce
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d končí\n", id)
}
func main() {
var wg sync.WaitGroup // Vytvoření WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Zvýšení čítače pro každou gorutinu
go worker(i, &wg) // Spuštění gorutiny, předání ukazatele na WaitGroup
}
wg.Wait() // Čekání, dokud čítač nedosáhne nuly (všechny gorutiny skončí)
fmt.Println("Všechny gorutiny skončily")
}