gpt4 book ai didi

Go channel 没有死锁或锁定

转载 作者:IT王子 更新时间:2023-10-29 01:01:17 28 4
gpt4 key购买 nike

我有一小段这样的代码

func main() {
var c chan string
go func() {
c <- "let's get started"//write1
//c <- "let's get started"//write2
//c <- "let's get started"//write3
fmt.Println("wrote the stuff....")
}()
//time.Sleep(3 * time.Second) //adding this always shows fatal exception
c = make(chan string)
fmt.Println(<-c)
}

如果我取消注释 //write2write3 代码片段行,我在控制台上看不到输出 wrote the stuff.... .我知道可能我看不到它是因为 channel 是无缓冲的并且是完全同步的,并且 channel 外只发生一次读取。但是,当程序退出时,go 例程被阻塞,为什么没有像 deadlocked... 之类的错误或我看到的这种情况下的错误?

最佳答案

在您尝试写入之前创建 channel 。如果 func goroutine 试图在实际存在 channel 之前通过 c 发送元素,它最终会使用 nil channel ,这将永远阻塞。

关于Go channel 没有死锁或锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51002195/

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