亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

所有 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 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號