目录
- sync.WaitGroup的用法
- WaitGroup总共有三个方法
- 如图:WatiGroup的定义
- google官方示例
- 总结
sync.WaitGroup的用法
WaitGroup在go语言中www.devze.com,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。
WaitGroup能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完python成。
WaitGroup总共有三个方法
Add(delta int),Done(),Wait()
简单的说一下这三个方法的作用。
Add
:添加或者减少等待goroutine的数量;Done
:相当于Add(-1);Wait
:执行阻塞,直到所有的WaitGroup数量变成 0;
如图:WatiGroup的定义
google官方示例
package main import ( "fmt" "sync" "net/http" ) func main() { var wg sync.WaitGroup var urls = []string{ "http://www.golang.org/", "http://www.google.com/", "http://www.baiyuxjsiong.com/", } for _, url := range urlsjavascript { // Increment the WaitGroup counter. wg.Add(1) // Launch a goroutine to fetch the URL. go func(url string) { // Decrement the counter when the goroutine completes. defer wg.Done() // Fetch the URL. http.Get(url) fmt.Println(url); }(url) } // Wait for all HTTP fetches to complete. wg.Wait()javascript fmt.Println("over"); }
代码执行结果为:
http://www.baiyuxiong.com/ http://www.google.com/ http://www.golang.org/ over
从执行结果可看出:
1、取三个网址信息的时候,结果显示顺序与for循环的顺序没有必然关系。
2、三个goroutine全部执行完成后,wg.Wait()才停止等待,继续执行并打印出over字符。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论