【发布时间】:2020-05-31 19:00:33
【问题描述】:
我创建了一个 Go playground sample 来说明我在说什么。
在示例中,我创建了一个 goroutine,func2,我只想等待通过其通道的输入并在它到达后打印值。
func func2(ch chan int) {
fmt.Println("func2")
v:=<-ch
fmt.Println(v)
}
然后,在一个循环中,我为另一个函数创建 goroutine,它们是 WaitGroup 的一部分。
func func1(ch chan int, wg *sync.WaitGroup) {
fmt.Println("func1")
ch <- 11032
wg.Done()
}
在主程序中,我等待 WaitGroup。我遇到了僵局,我不知道如何解决它。很清楚我想要实现的目标,我希望 func2 在我调用它后作为线程保持打开状态,以处理 n 个值,其中 n 是我为 func1 调用的 goroutine 的数量。我考虑在 func2 中使用 WaitGroup Wait,但我不希望它阻塞,因为它需要在 func1 发送时处理新数据。
【问题讨论】:
-
让 func2
range超过ch直到关闭。
标签: multithreading go deadlock channel goroutine