синхронизация канала
This commit is contained in:
parent
85d5b5771d
commit
8cd1fe18bd
@ -22,7 +22,7 @@ Switch
|
|||||||
Горутины (Goroutines)
|
Горутины (Goroutines)
|
||||||
Каналы (Channels)
|
Каналы (Channels)
|
||||||
Буферизированный канал (Channel Buffering)
|
Буферизированный канал (Channel Buffering)
|
||||||
Channel Synchronization
|
Синхронизация канала (Channel Synchronization)
|
||||||
Channel Directions
|
Channel Directions
|
||||||
Select
|
Select
|
||||||
Timeouts
|
Timeouts
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// We can use channels to synchronize execution
|
// Мы можем использовать каналы для синхронизации
|
||||||
// across goroutines. Here's an example of using a
|
// выполнения между горутинами. Вот пример
|
||||||
// blocking receive to wait for a goroutine to finish.
|
// использования блокирующего получения для ожидания
|
||||||
// When waiting for multiple goroutines to finish,
|
// завершения работы горутины. При ожидании завершения
|
||||||
// you may prefer to use a [WaitGroup](waitgroups).
|
// нескольких процедур вы можете использовать [WaitGroup](waitgroups).
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
@ -11,26 +11,27 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is the function we'll run in a goroutine. The
|
// Эту функцию мы будем запускать в горутине. Канал
|
||||||
// `done` channel will be used to notify another
|
// `done` будет использован для оповещения другой
|
||||||
// goroutine that this function's work is done.
|
// горутины о том, что функция выполнена успешно.
|
||||||
func worker(done chan bool) {
|
func worker(done chan bool) {
|
||||||
fmt.Print("working...")
|
fmt.Print("working...")
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
fmt.Println("done")
|
fmt.Println("done")
|
||||||
|
|
||||||
// Send a value to notify that we're done.
|
// Отправить значение, чтобы сказать что функция
|
||||||
|
// выполнена успешно.
|
||||||
done <- true
|
done <- true
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// Start a worker goroutine, giving it the channel to
|
// Запустите воркера в горутине и передайте ему канал
|
||||||
// notify on.
|
// для оповещения.
|
||||||
done := make(chan bool, 1)
|
done := make(chan bool, 1)
|
||||||
go worker(done)
|
go worker(done)
|
||||||
|
|
||||||
// Block until we receive a notification from the
|
// Блокируйте, пока мы не получим уведомление от
|
||||||
// worker on the channel.
|
// воркера из канала.
|
||||||
<-done
|
<-done
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
$ go run channel-synchronization.go
|
$ go run channel-synchronization.go
|
||||||
working...done
|
working...done
|
||||||
|
|
||||||
# If you removed the `<- done` line from this program, the
|
# Если вы удалите строку `<- done` из этой программы,
|
||||||
# program would exit before the `worker` even
|
# программа закроется до того, как `воркер` даже запустится.
|
||||||
# started.
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user