实现思路
- 定义任务结构体,包含任务的计算逻辑和结果存储。
- 使用
sync.WaitGroup
来等待所有任务完成。
- 使用
go - barrier
(实际Go标准库中没有go - barrier
,这里假设使用sync.Cond
实现类似功能)在所有任务完成后进行结果汇总。
关键代码片段
package main
import (
"fmt"
"sync"
)
// 定义任务结构体
type Task struct {
id int
result int
}
// 任务计算函数
func (t *Task) compute(wg *sync.WaitGroup, cond *sync.Cond) {
defer wg.Done()
// 模拟任务计算
t.result = t.id * 2
cond.L.Lock()
cond.Broadcast()
cond.L.Unlock()
}
func main() {
var wg sync.WaitGroup
var mu sync.Mutex
cond := sync.NewCond(&mu)
tasks := make([]Task, 5)
for i := range tasks {
tasks[i].id = i
wg.Add(1)
go tasks[i].compute(&wg, cond)
}
// 等待所有任务完成
go func() {
wg.Wait()
cond.L.Lock()
cond.Broadcast()
cond.L.Unlock()
}()
cond.L.Lock()
cond.Wait()
cond.L.Unlock()
// 汇总结果
total := 0
for _, task := range tasks {
total += task.result
}
fmt.Printf("汇总结果: %d\n", total)
}