go语言基础 同步等待组 sync.WaitGroup

为了能让子Goroutine执行完毕之后,主程序在结束,我们可以给利用sync.WaitGroup方法,这样就主程序就不会提前结束了。

package main

import (
   "fmt"
   "sync"
)
var wg sync.WaitGroup // 创建同步等待组对象
func main()  {
   /*
   WaitGroup:同步等待组
      可以使用Add(),设置等待组中要 执行的子goroutine的数量,
      启动子 goroutine,
      在main 函数中,使用wait(),让主程序处于等待状态。
         直到等待组中子程序执行完毕。解除阻塞

      子gorotuine对应的函数中。wg.Done(),用于让等待组中的子程序的数量减1
    */
    //设置等待组中,要执行的goroutine的数量
    wg.Add(1)
   go fun5()
   go fun6()
   fmt.Println("main进入阻塞状态。。。等待wg中的子goroutine结束。。")
   wg.Wait() //表示main goroutine进入等待,意味着阻塞
   fmt.Println("main,解除阻塞。。")

}
func fun5()  {
   for i:=1;i<=1000;i++{
      fmt.Println("fun5.。。i:",i)
   }
   wg.Done() //给wg等待中的执行的goroutine数量减1.同Add(-1)
}
func fun6()  {
   defer wg.Done()
   for j:=1;j<=1000;j++{
      fmt.Println("\tfun6..j,",j)
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值