РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
846 of 1593 menu

Метод sync.WaitGroup.Wait

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

Синтаксис

wg.Wait()

Метод не принимает параметров и не возвращает значений. Он используется в главной горутине для ожидания завершения всех рабочих горутин.

Пример

Давайте рассмотрим базовый пример использования метода Wait:

package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup for i := 1; i <= 3; i++ { wg.Add(1) go func(n int) { defer wg.Done() fmt.Printf("Goroutine %d done\n", n) }(i) } wg.Wait() fmt.Println("All goroutines completed") }

Результат выполнения кода:

"Goroutine 3 done" "Goroutine 1 done" "Goroutine 2 done" "All goroutines completed"

Обратите внимание, что порядок вывода горутин может быть различным, но строка All goroutines completed всегда выводится последней благодаря методу Wait.

Пример

Метод Wait часто используется для ожидания завершения нескольких горутин, выполняющих разные задачи. Например, мы можем запустить несколько горутин для обработки данных и дождаться их завершения:

package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup numbers := []int{1, 2, 3, 4, 5} for _, num := range numbers { wg.Add(1) go func(n int) { defer wg.Done() time.Sleep(100 * time.Millisecond) fmt.Printf("Processed: %d\n", n*2) }(num) } wg.Wait() fmt.Println("All processing completed") }

Результат выполнения кода:

"Processed: 2" "Processed: 4" "Processed: 6" "Processed: 8" "Processed: 10" "All processing completed"

В этом примере метод Wait блокирует главную горутину до тех пор, пока все горутины не завершат обработку своих чисел, после чего выводится итоговое сообщение.

Смотрите также

  • структуру sync.WaitGroup,
    которая представляет собой группу ожидания
  • метод sync.WaitGroup.Add,
    который увеличивает счетчик WaitGroup
  • метод sync.WaitGroup.Done,
    который уменьшает счетчик WaitGroup
  • ключевое слово goroutine,
    которое используется для запуска параллельных функций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить