gpt4 book ai didi

golang所有goroutines都睡着了 - 死锁

转载 作者:行者123 更新时间:2023-12-01 22:40:26 25 4
gpt4 key购买 nike

运行跟随 golang 片段时出现错误。
我认为进度将在 wg.Wait() 处阻塞,直到 go 例程结束。那么该值将从 c1 获得。但它可能不会按预期进行。

func main() {

c1 := make(chan string)
//var c1 chan string
var wg sync.WaitGroup

wg.Add(1)
go func() {
defer wg.Done()
fmt.Printf("go routine begin\n")
time.Sleep(1 * time.Second)
c1 <- "one"
fmt.Printf("go routine done\n")
}()
wg.Wait()
fmt.Printf("done c1: %v\n", <-c1)
fmt.Printf("out\n")
}

错误信息是,
 go routine begin
fatal error: all goroutines are asleep - deadlock!

最佳答案

写给 c1永远不会执行,因为从 c1 读取在 wg.Wait() 之后,这将停止到 c1被写入。所以主 goroutine 等待 wg.Wait()嵌套的 goroutine 在 c1 等待写。

您可以使 channel 缓冲,或等待c1在单独的 goroutine 上阅读。

关于golang所有goroutines都睡着了 - 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61023750/

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