對于我的一項要求,我必須創建 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 關注
- 205 瀏覽
添加回答
舉報
0/150
提交
取消