【go笔记】使用WaitGroup控制协程退出

前言

正常情况下,主协程一旦退出,其子协程也会全部中止并退出。为了阻塞主协程,可以使用time.Sleep(),也可以使用WaitGroup

用法说明

// 导入sync
import "sync"

// 定义一个sync.WaitGroup
var wg sync.WaitGroup

// 增加计数
wg.Add()

// 阻塞
wg.Wait()

// 减计数。当计数为0,主协程停止等待
wg.Done()

简单示例

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func WgTest(n int) {
	// 减计数
	defer wg.Done()
	fmt.Println(n)
}

func main() {
	// 协程数
	var numGoroutine int = 5
	wg.Add(numGoroutine)
	for i := 0;i < numGoroutine; i++ {
		go WgTest(i)
	}
	// 使用wg.Wait()阻塞主协程
	wg.Wait()
}
posted @ 2022-03-04 00:29  花酒锄作田  阅读(332)  评论(0编辑  收藏  举报