Files
2025-10-24 17:28:08 +08:00

45 lines
803 B
Go

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("所有任务完成")
}