dr637349
2019-09-15 16:22
浏览 64
已采纳

在golang中晃来晃去的goroutine

In the following code

  1. What happens to goroutine1?(at the end of program we have three goroutine goroutine1 without any functionality)
  2. What happens to channel?(when we make a channel in loop it release the previous channel memory? close it? or something else?)
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")
}

Run above code here

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyu4535 2019-09-15 16:51
    已采纳

    For i=1, the loop creates two goroutines, and starts waiting to read from the channel. goroutine2 writes first and terminates. The channel is read, and then i becomes 2. goroutine1 will wait forever, because nobody will read from the channel again. You create a new channel, and do the same thing. When everything is said and done, you have three instances of goroutine1 waiting to write to three different channels.

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题