Sobes.tech
Junior

Mit használ a WaitGroup a Go-ban?

sobes.tech MI

Válasz az MI-től

A WaitGroup egy vagy több goroutine munkájának szinkronizálására szolgál. Lehetővé teszi a fő goroutine számára, hogy várjon más létrehozott goroutine-ok befejezésére. Egy számlálóból áll, amely növekszik a goroutine létrehozásakor, és csökken, amikor az befejeződik.

Főbb módszerek:

  • Add(delta int): Növeli vagy csökkenti a goroutine-ok számát.
  • Done(): Csökkenti a számlálót 1-gyel. Általában a goroutine végén hívják (gyakran defer-rel együtt).
  • Wait(): Megakadályozza a végrehajtást, amíg a számláló el nem éri a nullát.

Használati példa:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Csökkenti a számlálót a goroutine végén

	fmt.Printf("Goroutine %d kezdődik\n", id)
	// Munka szimulálása
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d befejeződött\n", id)
}

func main() {
	var wg sync.WaitGroup // WaitGroup létrehozása

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Növeljük a számlálót minden goroutine esetében
		go worker(i, &wg) // Indítjuk a goroutine-t, átadva a mutatót a WaitGroup-hoz
	}

	wg.Wait() // Várunk, amíg a számláló el nem éri a nullát (minden goroutine befejeződik)
	fmt.Println("Minden goroutine befejeződött")
}