所有 goroutine 都睡着了 - 死锁

对于我的一项要求,我必须创建 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()

}


慕哥9229398
浏览 180回答 2
2回答

哈士奇WWW

如果您知道频道收到的消息数,那么您就可以限制循环;//c is channelfor a := 1; a <= 3; a++{&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(<-c)}您也可以将另一个通道(工作人员的状态)传递给工作人员,然后有条件地停止导致死锁的循环。Ps:这只是一个额外的快速解决方案。没有专门针对您的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go