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