Go by Example 中文:通道同步

Go by Example 中文:通道同步

我们可以使用通道来同步 Go 协程间的执行状态。这里是一个使用阻塞的接受方式来等待一个 Go 协程的运行结束。
下面是go的示例代码:

// Go by Example 中文:通道同步
// http://books.studygolang.com/gobyexample/channel-synchronization/
// 我们可以使用通道来同步Go协程间的执行状态。这里是一个使用阻塞的接收方式来等待一个Go协程的运行结束。
package main

import (
	"fmt"
	"time"
)

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

	// 向done通道传递一个值,来通知我们已经完工啦。
	done <- true
}

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

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

运行结果如下:

$ go run channel-synchronization.go
working...done

如果你把 <- done 这行代码从程序中移除,程序甚至会在 worker还没开始运行时就结束了。

下一个例子: 通道方向.

@mmcgrana 编写 | everyx 翻译 | 项目地址 | license

©️2020 CSDN 皮肤主题: 护眼 设计师: 闪电赇 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值