package main import ( "fmt" "sync" ) func Worker(id int, wg *sync.WaitGroup, task <-chan int, result []int, mu *sync.Mutex) { defer wg.Done() fmt.Println("worker ", id, "启动!") for tasks := range task { tmpres := tasks * tasks fmt.Println("worker ", id, "计算结果:", tmpres) mu.Lock() result[tasks] = tmpres mu.Unlock() } } func main() { const workernum = 10 const calnum = 1000 task := make(chan int, 10) result := [calnum]int{} var wg sync.WaitGroup var mu sync.Mutex for i := 0; i < workernum; i++ { wg.Add(1) go Worker(i, &wg, task, result[:], &mu) } go func() { for i := 0; i < calnum; i++ { task <- i } close(task) }() wg.Wait() for _, value := range result { fmt.Println("计算结果:", value) } fmt.Println("所有任务完成") }