Sobes.tech
Junior

Kam paredzēts WaitGroup Go?

sobes.tech AI

Atbilde no AI

WaitGroup tiek izmanto, lai sinhronizētu vienas vai vairākas goroutines darbu. Tas ļauj galvenajai goroutine gaidīt, kamēr citas izveidotās goroutines pabeigs darbu. Tas sastāv no skaitītāja, kas palielinās, izveidojot goroutine, un samazinās, kad tā beidzas.

Galvenās metodes:

  • Add(delta int): Palielina vai samazina goroutine skaitītāju.
  • Done(): Samazina skaitītāju par 1. Parasti tiek izsaukts goroutine beigās (bieži ar defer).
  • Wait(): bloķē izpildi līdz skaitītājs sasniedz nulli.

Piemērs:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Samazina skaitītāju, kad goroutine pabeidzas

	fmt.Printf("Goroutine %d sākas\n", id)
	// Darba simulācija
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d pabeidza\n", id)
}

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

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Palielina skaitītāju katrai goroutine
		go worker(i, &wg) // Sāk goroutine, nododot norādi uz WaitGroup
	}

	wg.Wait() // Gaidīt, kamēr skaitītājs sasniedz nulli ( visas goroutines pabeidzās)
	fmt.Println("Visas goroutines pabeidza")
}