gpt4 book ai didi

go - 死锁在goroutines中

转载 作者:行者123 更新时间:2023-12-01 21:16:13 29 4
gpt4 key购买 nike

有人可以给我一些有关此代码的见解,为什么这会导致for x:=range c中出现死锁错误

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

for i:=0;i<5;i++{
go func(chanel chan int,i int){
println("i",i)
chanel <- 1
}(c,i)
}

for x:=range c {
println(x)
}
println("Done!")
}

最佳答案

因为这:

    for x:=range c {
println(x)
}

将循环播放,直到关闭 c channel 为止,此操作在此从未完成。

这是使用WaitGroup修复它的一种方法:

package main

import "sync"

func main() {
var wg sync.WaitGroup
c := make(chan int, 10)

for i := 0; i < 5; i++ {
wg.Add(1)
go func(chanel chan int, i int) {
defer wg.Done()
println("i", i)
chanel <- 1
}(c, i)
}

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

for x := range c {
println(x)
}
println("Done!")
}

Try it on Go Playground

关于go - 死锁在goroutines中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59025035/

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