gpt4 book ai didi

go - 为什么不关闭 channel 就不会出现死锁呢?

转载 作者:IT王子 更新时间:2023-10-29 02:35:32 31 4
gpt4 key购买 nike

Go RunTime 写入管道,然后不关闭管道,之后正常执行。

为什么不关闭 channel 就不会出现死锁?

package main

import (
`fmt`
`time`
)

func product(num int) chan int {
ch := make(chan int, 1)

go func(num int) {
for i := 0; i < num; i++ {
ch <- i
}
}(num)

return ch
}

func main() {
in := product(100)

go func() {
for v := range in {
fmt.Println(v)
}
}()

time.Sleep(time.Second)
}

// 0 1 2 3 4 5 ...

最佳答案

因为不存在两个 goroutine 相互等待而没有一个可以继续执行的情况。

您在一个单独的(非主)goroutine 中从 channel 读取数据,同时主 goroutine 未被阻塞并在计时器达到 1 秒后立即退出。

如果您将 read for 循环移动到主 goroutine,那么您将遇到死锁错误。因为在这种情况下,程序将永远被阻止,因为您尝试从中读取的 channel 没有关闭并且没有人再写入它。

另见 Deadlock between goroutines

关于go - 为什么不关闭 channel 就不会出现死锁呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55178399/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com