gobyexample/examples/channel-synchronization/channel-synchronization.go
2019-10-07 22:08:57 +03:00

38 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Мы можем использовать каналы для синхронизации
// выполнения между горутинами. Вот пример
// использования блокирующего получения для ожидания
// завершения работы горутины. При ожидании завершения
// нескольких процедур вы можете использовать [WaitGroup](waitgroups).
package main
import (
"fmt"
"time"
)
// Эту функцию мы будем запускать в горутине. Канал
// `done` будет использован для оповещения другой
// горутины о том, что функция выполнена успешно.
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
// Отправить значение, чтобы сказать что функция
// выполнена успешно.
done <- true
}
func main() {
// Запустите воркера в горутине и передайте ему канал
// для оповещения.
done := make(chan bool, 1)
go worker(done)
// Блокируйте, пока мы не получим уведомление от
// воркера из канала.
<-done
}