完成工作池协程题
This commit is contained in:
@@ -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("所有任务完成")
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user