Go語言sync庫和WaitGroup的使用
阿新 • • 發佈:2018-10-07
%d 調用 如果 運行時 main函數 fmt package 信號量 計數
// code_041_sync_WaitGroup project main.go
package main
import (
"fmt"
"sync"
)
func main() {
fmt.Println("Hello World!")
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
for i := 0; i < 10000; i++ {
fmt.Printf("Hello,Go.This is %d\n", i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000; i++ {
fmt.Printf("Hello, world.This is %d\n", i)
}
}()
wg.Wait()
}
sync.WaitGroup是一個計數的信號量,使main函數所在主線程等待兩個goroutine執行完成後再結束,否則兩個goroutine還在運行時,主線程已經結束。
sync.WaitGroup使用非常簡單,使用Add方法設設置計數器為2,每一個goroutine的函數執行完後,調用Done方法減1。Wait方法表示如果計數器大於0,就會阻塞,main函數會一直等待2個goroutine完成再結束。
Go語言sync庫和WaitGroup的使用