gobyexample-channel-synchronization

来源:https://github.com/xg-wang/gobyexample/tree/master/examples

//我们可以使用通道来同步Go协程间的执行状态。这里是一个通过使用
//阻塞的接收方式来等待一个Go协程的运行结束
package main

import (
    "fmt"
    "time"
)

//这是一个我们将要在 Go 协程中运行的函数。`done`通道
//将被用于通知其他 Go 协程这个函数已经工作完毕
func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")

    //发送一个值来通知我们已经完工了
    done <- true
}

func main() {

    //运行一个worker Go 协程,并给予用于通知的通道
    done := make(chan bool, 1)
    go worker(done)

    // 程序将在接收到通道中worker发出的通知前一直阻塞
    <-done
    //如果移除此段代码,程序甚至会在`worker`还没有开始运行就结束了
}


输出结果:

working...done

你可能感兴趣的:(gobyexample-channel-synchronization)