对于我的一项要求,我必须创建 N 个工作程序 go 例程,这些例程将由一个监视例程进行监视。当所有工人例程完成时,监视例程必须结束。我的代码以死锁结尾,请帮忙。import "fmt"import "sync"import "strconv"func worker(wg *sync.WaitGroup, cs chan string, i int ){ defer wg.Done() cs<-"worker"+strconv.Itoa(i) }func monitorWorker(wg *sync.WaitGroup, cs chan string) { defer wg.Done() for i:= range cs { fmt.Println(i) }}func main() { wg := &sync.WaitGroup{} cs := make(chan string) for i:=0;i<10;i++{ wg.Add(1) go worker(wg,cs,i) } wg.Add(1) go monitorWorker(wg,cs) wg.Wait()}
2 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
如果您知道频道收到的消息数,那么您就可以限制循环;
//c is channel
for a := 1; a <= 3; a++{
fmt.Println(<-c)
}
您也可以将另一个通道(工作人员的状态)传递给工作人员,然后有条件地停止导致死锁的循环。
Ps:这只是一个额外的快速解决方案。没有专门针对您的解决方案。
- 2 回答
- 0 关注
- 179 浏览
添加回答
举报
0/150
提交
取消