我正在尝试并行运行多个goroutine,然后在完成所有计算后收集这些计算的结果。
无论我尝试什么,我都会收到以下错误:
致命错误:所有goroutine都睡着了 - 死锁!
以下是我的代码的布局:
func Function(inputs) {
var wg sync.WaitGroup
wg.Add(numBatch)
deltaChan := make(chan DeltaPair)
for b := 1 ; b <= numBatch ; b++ {
... some calculations
go BackPropagate(otherinputs, deltaChan, &wg)
}
for delta := range deltaChan {
AddNeurons(&nDeltas, &delta.n)
AddSynapses(&sDeltas, &delta.s)
}
wg.Wait()
close(deltaChan)
}
func BackPropagate(otherinputs, deltaChan chan<- DeltaPair, wg *sync.WaitGroup) {
defer (*wg).Done()
... some calculations
deltaChan <- DeltaPair{nDeltas, sDeltas}
}