Junior
Kam paredzēts WaitGroup Go?
sobes.tech AI
Atbilde no AI
WaitGroup tiek izmanto, lai sinhronizētu vienas vai vairākas goroutines darbu. Tas ļauj galvenajai goroutine gaidīt, kamēr citas izveidotās goroutines pabeigs darbu. Tas sastāv no skaitītāja, kas palielinās, izveidojot goroutine, un samazinās, kad tā beidzas.
Galvenās metodes:
Add(delta int): Palielina vai samazina goroutine skaitītāju.Done(): Samazina skaitītāju par 1. Parasti tiek izsaukts goroutine beigās (bieži ardefer).Wait(): bloķē izpildi līdz skaitītājs sasniedz nulli.
Piemērs:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Samazina skaitītāju, kad goroutine pabeidzas
fmt.Printf("Goroutine %d sākas\n", id)
// Darba simulācija
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d pabeidza\n", id)
}
func main() {
var wg sync.WaitGroup // Izveido WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Palielina skaitītāju katrai goroutine
go worker(i, &wg) // Sāk goroutine, nododot norādi uz WaitGroup
}
wg.Wait() // Gaidīt, kamēr skaitītājs sasniedz nulli ( visas goroutines pabeidzās)
fmt.Println("Visas goroutines pabeidza")
}