Назад к вопросам
Junior
117
questionbank
Для чего используется WaitGroup в Go?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
WaitGroup используется для синхронизации работы одной или нескольких горутин. Позволяет основной горутине дождаться завершения выполнения других созданных горутин. Состоит из счетчика, который увеличивается при создании горутины и уменьшается при ее завершении.
Основные методы:
Add(delta int): Увеличивает или уменьшает счетчик горутин.Done(): Уменьшает счетчик на 1. Обычно вызывается в конце горутины (часто с использованиемdefer).Wait(): Блокирует выполнение до тех пор, пока счетчик не станет равным нулю.
Пример использования:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Уменьшаем счетчик по завершении горутины
fmt.Printf("Горутина %d начала работу\n", id)
// Имитация работы
// time.Sleep(time.Second)
fmt.Printf("Горутина %d завершила работу\n", id)
}
func main() {
var wg sync.WaitGroup // Создаем WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Увеличиваем счетчик для каждой горутины
go worker(i, &wg) // Запускаем горутину, передавая указатель на WaitGroup
}
wg.Wait() // Ждем, пока счетчик не станет 0 (все горутины завершатся)
fmt.Println("Все горутины завершены")
}