go中并发任务如何同步?

介绍

并发任务的处理需要引入 sync.WaitGroup

核心方法

  • Add(1)//计数器加1
  • Done()//计数器-1
  • Wait()//阻塞直到计数器为0

注意事项

  • 计数器不能为负值
  • WaitGroup对象不是一个引用类型
    • WaitGroup对象不是一个引用类型,在通过函数传值的时候需要使用地址

func main() {
wg := sync.WaitGroup{}
wg.Add(100)
for i := 0; i < 100; i++ {
go f(i, &wg)
}
wg.Wait()
}

// 一定要通过指针传值,不然进程会进入死锁状态
func f(i int, wg *sync.WaitGroup) {
fmt.Println(i)
wg.Done()
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Go语言中的并发编程 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很...
    吴佳浩阅读 372评论 0 1
  • 协程同步 经常看到有人会问如何等待主协程中创建的协程执行完毕之后再结束主协程,例如如下代码: 执行以上代码很可能看...
    不屈真实阅读 1,299评论 2 2
  • 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。 Go语言...
    雪上霜阅读 251评论 0 0
  • 1. 概述 Go程序可以通过channel在多个goroutine 之间进行数据交换保障了数据正确性,但是chan...
    楚江云阅读 694评论 0 8
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,608评论 28 53