golang--sync.WaitGroup實現線程的同步阻塞

1、概述:sync.waitGroup用於等待一組線程的結束,實現同步阻塞,是值類型。在一組任務完成前,先阻塞線程,等這組任務完成後再解鎖線程,繼續執行後續操作。

2、主要方法:

創建waitGroup:

//由於sync.WaitGroup是值類型,所以可以用var直接聲明,也可以用:=的格式創建
var wg sync.WaitGroup
wg := sync.WaitGroup{}

添加任務數量:wg.Add(任務數量)

wg.Add(5)    //設置要等待的任務數量爲5

減少任務數量(在些goroutine結束時執行):

wg.Done()

下面舉個應用實例:

package main

import (
	"fmt"
	"sync"
)

func main() {
	var wg sync.WaitGroup

	wg.Add(5) //添加等待線程數量

	for i := 0; i < 5; i++ {
		//開啓新的goroutine,在goroutine運行結束時調用wg.Done()
		go func(_wg *sync.WaitGroup, index int) {
			defer _wg.Done() //減少等待的線程數量,需要在goroutine運行結束時調用,(可以用defer,不使用defer的話就需要把_wg.Done()放在函數的最後)

			fmt.Printf("線程%d運行結束...\n", index)
		}(&wg, i)
	}
	wg.Wait() //等待設置的線程數減少爲0時,纔會取消阻塞
	fmt.Println("main函數運行結束...")
}

運行結果如下:

線程4運行結束...
線程1運行結束...
線程0運行結束...
線程2運行結束...
線程3運行結束...
main函數運行結束...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章