Sobes.tech
Назад к вопросам
Junior — Middle
89

Можешь показать пример применения механизма ожидания групп в программировании?

Компании, где спрашивали
Twinby

Ответ от нейросети

sobes.tech AI

В Go механизм ожидания групп (sync.WaitGroup) используется для ожидания завершения набора горутин. Это удобно, когда нужно запустить несколько параллельных задач и дождаться их окончания.

Пример:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Сообщаем, что работа завершена
    fmt.Printf("Worker %d started\n", id)
    // Здесь может быть любая работа
    fmt.Printf("Worker %d finished\n", id)
}

func main() {
    var wg sync.WaitGroup
    numWorkers := 3

    wg.Add(numWorkers) // Устанавливаем количество ожидаемых горутин

    for i := 1; i <= numWorkers; i++ {
        go worker(i, &wg)
    }

    wg.Wait() // Ждем, пока все горутины вызовут Done()
    fmt.Println("All workers completed")
}

В этом примере main запускает 3 горутины, каждая из которых выполняет функцию worker. WaitGroup позволяет main дождаться завершения всех горутин перед выходом из программы.