为了账号安全,请及时绑定邮箱和手机立即绑定

所有 goroutine 都睡着了 - 死锁

所有 goroutine 都睡着了 - 死锁

Go
慕哥9229398 2021-07-02 06:58:01
对于我的一项要求,我必须创建 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:这只是一个额外的快速解决方案。没有专门针对您的解决方案。


查看完整回答
反对 回复 2021-07-05
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信