Sobes.tech
Junior

WaitGroup дар Go барои чӣ истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

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 приключиха")
}