Что такое WaitGroup?

Этот вопрос проверяет знание механизма синхронизации WaitGroup, который используется для ожидания завершения нескольких горутин.

Короткий ответ

WaitGroup в Go — это структура из пакета sync, позволяющая организовать ожидание завершения набора горутин. Она предоставляет методы для увеличения счетчика активных горутин, их завершения и блокировки выполнения до их завершения.

Длинный ответ

WaitGroup — это инструмент синхронизации, который упрощает управление множеством горутин. Его ключевые методы:

- Add(n int) — увеличивает счетчик горутин на n.

- Done() — уменьшает счетчик на 1 (обычно вызывается горутиной по завершении).

- Wait() — блокирует выполнение текущей горутины до обнуления счетчика.

 

Пример:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Уменьшает счетчик после завершения
	fmt.Printf("Горутина %d начала работу\n", id)
	// Эмуляция работы
	fmt.Printf("Горутина %d завершила работу\n", id)
}

func main() {
	var wg sync.WaitGroup

	for i := 1; i <= 3; i++ {
		wg.Add(1) // Увеличиваем счетчик
		go worker(i, &wg)
	}

	wg.Wait() // Ждем завершения всех горутин
	fmt.Println("Все горутины завершены")
}

 

В каких случаях использовать:

- Для ожидания завершения набора горутин.

- Для синхронизации между основным потоком и конкурентно работающими горутинами.

- При выполнении параллельных задач с неизвестным временем завершения.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • Golang

Подпишись на Golang Developer в телеграм