CodeFun Go

通道同步

我们可以使用通道来同步协程之间的执行状态。

本示例中,使用阻塞接收的方式,实现了等待另一个协程完成。 如果需要等待多个协程,WaitGroup 是一个更好的选择。

我们将要在协程中运行这个 work 函数。 done 通道将被用于通知其他协程这个函数已经完成工作。

work 函数执行完,发送一个值通知状态。

done <- true

在主程序中使用 <-done 接受通知。主程序将一直处于阻塞状态,直至收到 work 使用通道发送的通知。

package main

import (
	"fmt"
	"time"
)

func main() {
	done := make(chan bool, 1)
    go work(done)
	<-done
}

func work(done chan bool) {
	fmt.Print("working...")
	time.Sleep(time.Second)
	fmt.Println("done")

	done <- true
}
working...done