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

golang 中的悬挂 goroutine

golang 中的悬挂 goroutine

Go
郎朗坤 2023-07-26 13:10:33
在下面的代码中会发生什么goroutine1?(在程序结束时我们有三个goroutine1没有任何功能的 goroutine)通道会发生什么?(当我们循环创建一个通道时,它会释放前一个通道内存?关闭它?还是其他什么?)func main() {    for i := 1; i <= 3; i += 1 {        ch := make(chan int)        // gorutine1        go func() {            time.Sleep(3 * time.Second)            ch <- i            fmt.Println("gorutine1 end")        }()        // gorutine2        go func() {            time.Sleep(1 * time.Second)            ch <- i+1000            fmt.Println("gorutine2 end")        }()        fmt.Println("loop", <-ch)    }    time.Sleep(10 * time.Second)    fmt.Println("main end")}
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

对于i=1,循环创建两个 goroutine,并开始等待从通道读取。goroutine2 首先写入并终止。通道被读取,然后i变成2。goroutine1将永远等待,因为没有人会再次从通道读取。您创建一个新频道,然后执行相同的操作。当一切都说完并完成后,您将拥有三个 goroutine1 实例等待写入三个不同的通道。



查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

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