Go 並發控制--WaitGroup的使用


開發過程中,經常遇到task之間的同步問題。例如,多個子task並發完成一部分任務,主task等待他們最后結束。

在Go語言,實現同步的一種方式就是WaitGroup。

Example

package main 

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



func main() {

	var wg sync.WaitGroup


	wg.Add(3)
	go func(n int){
		fmt.Println("n:", n)
		t := time.Duration(n)*time.Second
		time.Sleep(t)

		wg.Done()
	}(1)


	go func(n int){
		fmt.Println("n:", n)
		t := time.Duration(n)*time.Second
		time.Sleep(t)
		time.Sleep(t)

		wg.Done()
	}(2)

	go func(n int){
		fmt.Println("n:", n)
		t := time.Duration(n)*time.Second
		time.Sleep(t)

		wg.Done()
	}(3)

	wg.Wait()

	fmt.Println("main exit...")
}


output:

n: 3

n: 1

n: 2

main exit...

注意

WaitGroup變量定義后,是不允許被拷貝的,即不允許作為函數參數或者賦值給其他變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM