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