我最近开始学习围棋,但遇到了一个问题。我有一个简单的 go 例程,它可以将值返回或推送到通道。我的主要 fn 委托工作到这个例程,直到它满足条件或数据耗尽。此代码似乎在“找到”频道上陷入僵局。我究竟做错了什么?
有多个工人
物品可以同时在多个工人身上找到
一旦发现项目,应停止所有工人。
func workerRoutine(data Data, found chan bool, wg *sync.WaitGroup){
defer (*wg).Done()
// data processing
// return on false
// multiple routines can set this at the same time
found <-true
}
func main {
// ....
found:=make(chan bool)
var wg sync.WaitGroup
itemFound:=false
Loop:
for i:=0; i<limit; i++ {
select {
case <-found:
itemFound = true
break Loop
default:
if(some_check) {
wg.Add(1)
go workerRoutine(mdata,found,&wg)
}
}
}
wg.Wait()
// use itemFound
}
繁星coding
相关分类