加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang sync WaitGroup

发布时间:2020-12-16 19:13:34 所属栏目:大数据 来源:网络整理
导读:WaitGroup:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。 Add(delta int),Done(),Wait() Add添加或者减少等待goroutine的数量 Done相当于Add(-1) Wait执行阻塞,直到所有的WaitGroup数量变成0 package main

WaitGroup:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。

Add(delta int),Done(),Wait()

  • Add添加或者减少等待goroutine的数量
  • Done相当于Add(-1)
  • Wait执行阻塞,直到所有的WaitGroup数量变成0
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup

	for i := 0; i < 5; i = i + 1 {
		wg.Add(1)
		go func(n int) {
			// defer wg.Done()
			defer wg.Add(-1)
			hold3Seconds(n)
		}(i)
	}
	wg.Wait()//拖住主线程,直到waitgroup=0
}

func hold3Seconds(i int) {
	time.Sleep(3e9)
	fmt.Println(i)
}
简单不做详细解释了,其实channel也可以实现,如果不需要子线程与主线程数据同步,这个更方便点。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读