最近在学习golang,记一次goroutine传参引发的计算结果和预期不一致问题。
例子是一个多goroutine并行计算一个数的值,一个task的chan,和一个result的chan用来存储分配的每个任务,和每个任务的计算结果,最后将所有的任务结果相加
先看有问题的代码:
package main
import (
"fmt"
"sync"
)
//利用chan将计算任务拆分成多个task,并发计算
type task struct {
begin int
end int
result chan int
}
func (t *task) do() {
sum := 0
for i := t.begin; i <= t.end; i++ {
sum = sum + i
}
fmt.Printf("this sum is %d\n", sum)
t.result <- sum
}
//分配task,将总的任务分割
func InitTask(taskchan chan task, r chan int, count int) {
//10个任务,每个任务的数目
cp := count / 10
//余数
du := count % 10
high := du + cp*10
for j := 0; j < 10; j