我们可以使用通道在goroutine
上同步执行程序。这里有一个使用阻塞接收等待goroutine
完成的示例。
这是将在goroutine
中运行的函数。 done
通道将用来通知另一个goroutine
这个函数的工作已经完成,发送值以通知已经完成。
启动一个goroutine
工作程序,给它一个通知通道。如果从此程序中删除 <-done
行,程序将在工作程序(worker
)启动之前退出。
阻止,直到在通道上收到工作程序的通知。
所有的示例代码,都放在
F:\worksp\golang
目录下。安装Go编程环境请参考:/tutorial/detail-5562.html
channel-synchronization.go
的完整代码如下所示 -
package main import "fmt" import "time" // This is the function we'll run in a goroutine. The // `done` channel will be used to notify another // goroutine that this function's work is done. func worker(done chan bool) { fmt.Print("working...") time.Sleep(time.Second) fmt.Println("done") // Send a value to notify that we're done. done <- true } func main() { // Start a worker goroutine, giving it the channel to // notify on. done := make(chan bool, 1) go worker(done) // Block until we receive a notification from the // worker on the channel. <-done }
执行上面代码,将得到以下输出结果 -
F:\worksp\golang>go run channel-synchronization.go working...done