gpt4 book ai didi

algorithm - 程序正在等待 goroutines 完成,但 goroutines 被死锁

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

这个问题在这里已经有了答案:





Go all goroutines are asleep deadlock

(2 个回答)



fatal error: all goroutines are asleep - deadlock! when channel is not buffered

(1 个回答)



Why do we need to run unbuffered channels in go routine but buffered channels can work without go routine?

(2 个回答)



Golang Goroutine Error "all goroutines are asleep - deadlock!"

(1 个回答)



golang all goroutines are asleep - deadlock

(3 个回答)


1年前关闭。




谁知道为什么fatal error: all goroutines are asleep - deadlock!发生在这里?我想生成 5 个 goroutine 并将每个 goroutine 中的错误发送到一个 channel ,然后等待所有这些 go 例程完成,然后再生成更多 goroutine 发送到 channel 。

package main

import (
"errors"
"fmt"
"sync"
)

func main() {
var wg sync.WaitGroup
ch := make(chan error)
var allErrors []error

wg.Add(5)
for i := 0; i < 5; i++ {
go func() {
defer wg.Done()

ch <- errors.New("lalalla")
}()
}
wg.Wait()

wg.Add(2)

go func() {
defer wg.Done()
ch <- errors.New("some error")
}()

go func() {
defer wg.Done()
ch <- errors.New("other error")
}()

go func() {
wg.Wait()
close(ch)
}()

go func() {
for e := range ch {
allErrors = append(allErrors, e)
}
}()

wg.Wait()

fmt.Println(allErrors)

}
https://play.golang.org/p/LhjBaTgLDn6

最佳答案

第一个wg.Wait等待 goroutine 完成,但没有从该 channel 读取任何内容,因此所有 goroutine 都被阻塞等待写入 channel 。
在等待 goroutine 之前启动从 channel 读取的 goroutine。

关于algorithm - 程序正在等待 goroutines 完成,但 goroutines 被死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63288982/

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