Sobes.tech
Junior

Čo je to WaitGroup v Go a na čo sa používa?

sobes.tech AI

Odpoveď od AI

WaitGroup je mechanizmus synchronizácie v Go, ktorý umožňuje čakať na dokončenie skupiny gorútín.

Používa sa na:

  • Čakanie na dokončenie všetkých gorútín pred ukončením funkcie alebo programu.
  • Koordináciu práce medzi viacerými gorútinami.

Príklad použitia:

package main

import (
	"fmt"
	"sync"
	"time"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Znižuje čítač po ukončení gorutiny

	fmt.Printf("Pracovník %d začal\n", id)
	time.Sleep(time.Second) // Simulácia práce
	fmt.Printf("Pracovník %d skončil\n", id)
}

func main() {
	var wg sync.WaitGroup // Deklarujeme WaitGroup
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Zvýšenie čítača pred spustením každej gorutiny
		go worker(i, &wg)
	}

	wg.Wait() // Zablokuje vykonávanie main, kým čítač nedosiahne 0
	fmt.Println("Všetci pracovníci dokončili")
}

Hlavné metódy:

  • Add(delta int): Zvýši vnútorný čítač WaitGroup o delta. Mal by byť volaný pred spustením každej sledovanej gorutiny.
  • Done(): Zníži vnútorný čítač WaitGroup o 1. Zvyčajne sa volá s defer v gorutine, aby sa zabezpečilo zníženie aj pri panike.
  • Wait(): Blokuje aktuálnu gorutinu, kým vnútorný čítač WaitGroup nedosiahne 0.