Sobes.tech
Junior

Kam naudojamas WaitGroup Go?

sobes.tech AI

Atsakymas iš AI

WaitGroup naudojamas sinchronizuoti vienos ar kelių gorutinių darbą. Jis leidžia pagrindinei gorutinei laukti kitų sukurtų gorutinių užbaigimo. Sudarytas iš skaitiklio, kuris didėja, kai kuriama gorutina, ir mažėja, kai ji baigiama.

Pagrindiniai metodai:

  • Add(delta int): Padidina arba sumažina gorutinių skaitiklį.
  • Done(): Sumažina skaitiklį 1. Paprastai kviečiama gorutinos pabaigoje (dažnai su defer).
  • Wait(): Blokuoja vykdymą, kol skaitiklis nepasiekia nulio.

Pavyzdys:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Sumažina skaitiklį, kai gorutina baigiasi

	fmt.Printf("Gorutina %d pradeda\n", id)
	// Darbo imitacija
	// time.Sleep(time.Second)
	fmt.Printf("Gorutina %d baigė\n", id)
}

func main() {
	var wg sync.WaitGroup // Sukuriamas WaitGroup

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Padidinti skaitiklį kiekvienai gorutinei
		go worker(i, &wg) // Paleisti gorutina, perduodant nuorodą į WaitGroup
	}

	wg.Wait() // Laukti, kol skaitiklis pasieks nulį (visos gorutinos baigsis)
	fmt.Println("Visos gorutinos baigėsi")
}