diff --git a/协程/工作池/main.go b/协程/工作池/main.go index c7cd884..561a843 100644 --- a/协程/工作池/main.go +++ b/协程/工作池/main.go @@ -1 +1,44 @@ -package 工作池 +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("所有任务完成") + +}