Sobes.tech
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 су завршене")
}