分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
代码如下(不完整):将1-100 分为10组,分别求和再相加。 taskChan 中有10个task,分别存着 1-10,11-20,,,,91-100这10组数字。 可是使用distributeTask1函数时,算出的结果每次都不一样。而使用distributeTask函数则结果正常。另外在t.do()方法中,我打印了每个task的 begin和 end。两次的结果分别如下
```go
package main
type task struct {
begin int
end int
result chan int
}
func (t *task) do(group *sync.WaitGroup) {
sum := 0
for i := t.begin; i <= t.end; i++ {
sum += i
}
fmt.Printf("begin:%d,end:%d\n",t.begin,t.end)
t.result <- sum
group.Done()
}
func distributeTask1(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) {
for t := range taskChan {
wg.Add(1)
go t.do(wg)
}
wg.Wait()
close(resultChan)
}
func distributeTask(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) {
for t := range taskChan {
wg.Add(1)
go processTask(t,wg)
}
wg.Wait()
close(resultChan)
}
func processTask(t task,wg *sync.WaitGroup){
t.do(wg)
}
```


有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1247 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传