为了账号安全,请及时绑定邮箱和手机立即绑定

如果我知道它们是有限的,我应该消耗所有 golang 通道的值吗?

如果我知道它们是有限的,我应该消耗所有 golang 通道的值吗?

Go
四季花海 2021-09-10 15:35:00
我正在研究A Tour of Go的Concurrency 部分,我很好奇使用有限通道的正确 Go 约定。在本练习中,我需要从两个通道读取值并确定这些值是否相同且顺序相同。如果没有,我可以立即从我的方法中返回。但是,如果我这样做,Go 会自动为我清理我的频道,还是我的 goroutine 会永远挂起并消耗资源?false处理此问题的最佳方法是将取消通道传递到我的 goroutine 中,但由于 goroutine 读取的数据量有限,因此只消耗所有数据似乎没问题。在现实生活中处理这种情况的最佳方法是什么?
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

Andrew Gerrand 在 Gophercon 的演讲涵盖了幻灯片 37上的这个确切问题。


创建一个退出频道并将其传递给每个步行者。通过在 Same 退出时关闭退出,任何正在运行的步行者都会被终止。


func Same(t1, t2 *tree.Tree) bool {

    quit := make(chan struct{})

    defer close(quit)

    w1, w2 := Walk(t1, quit), Walk(t2, quit)

    for {

        v1, ok1 := <-w1

        v2, ok2 := <-w2

        if v1 != v2 || ok1 != ok2 {

            return false

        }

        if !ok1 {

            return true

        }

    }

}


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信