在线文档 > Golang练习 > 通道同步
我们可以使用通道来同步在 协程 之间的执行。下面是一个使用阻塞接收等待 协程 完成的示例。当等待多个 协程 完成时,您可能更喜欢使用 WaitGroup 。
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() {
// 启动一个 worker 协程,并给它通知的通道。
done := make(chan bool, 1)
go worker(done)
// 程序将一直阻塞,直到我们从通道中接收到 worker 的通知。
<-done
}
运行结果如下:
$ go run channel-synchronization.go
working...done
如果从此程序中删除 <-done
行,则程序将在worker
启动之前退出。