Junior
Zašto se koristi WaitGroup u Go?
sobes.tech АИ
Одговор од АИ
WaitGroup се користи за синхронизацију рада једне или више goroutines. Омогућава главној goroutine да чека да се заврше друге креиране goroutines. Састоји се од бројача који се повећава приликом креирања goroutine и смањује када она заврши.
Главне методе:
Add(delta int): Повећава или смањује бројач goroutines.Done(): Смањује бројач за 1. Обично се позива на крају goroutine (често саdefer).Wait(): Блокира извршавање док бројач не постане нула.
Пример употребе:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Смањује бројач на крају goroutine
fmt.Printf("Goroutine %d почиње\n", id)
// Симулација рада
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d завршена\n", id)
}
func main() {
var wg sync.WaitGroup // Креирање WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Повећавамо бројач за сваку goroutine
go worker(i, &wg) // Покрећемо goroutine, преносећи показивач на WaitGroup
}
wg.Wait() // Чекамо док бројач не постане 0 (све goroutines заврше)
fmt.Println("Све goroutines су завршене")
}