// Synchronization 一个并发执行器, 并发的执行N个任务
// 等待所有任务返回结果,然后在做统一的处理
func Synchronization(args ...func()) {
// 创建N个管道,管道用来接收各个并发的任务的完成
n := len(args)
chs := make([]chan int, n)
defer func() {
for _, c := range chs {
if c != nil {
close(c)
}
}
}()
// 开启N个任务
for i, f := range args {
chs[i] = make(chan int)
// 这里要注意用局部变量产生闭包
tf := f
retCh := chs[i]
go func() {
tf()
retCh <- 1
}()
}
// 等待所有的并发进程完成
for _, ch := range chs {
<-ch
}
}
golang 并发之后同步
最新推荐文章于 2024-07-27 21:41:25 发布