gpt4 book ai didi

go - 转到 channel 死锁未发生

转载 作者:行者123 更新时间:2023-12-01 20:08:38 30 4
gpt4 key购买 nike

package main
import (
"fmt"
"time"
)

func main() {
c := make(chan int)

go func() {
fmt.Println("hello")
c <- 10
}()

time.Sleep(2 * time.Second)
}

在以上程序中,我创建了一个Go例程,该例程正在写入 channel c,但是没有其他go例程正在从该 channel 读取。为什么在这种情况下没有僵局?

最佳答案

死锁意味着所有goroutine被阻止,而不仅仅是您选择的任意goroutine。
main goroutine只是处于 sleep 状态,一旦结束,它便可以继续运行。

如果使用永久阻止sleep的方式切换select{},则会出现死锁:

c := make(chan int)

go func() {
fmt.Println("hello")
c <- 10
}()

select {}

Go Playground上尝试一下。

参见相关: Why there is no error that receiver is blocked?

关于go - 转到 channel 死锁未发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61655436/

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