正规网赌平台go语言执行等待直到后台goroutine执行完成实例分析

本文实例分析了go语言执行等待直到后台goroutine执行完成的用法。分享给大家供大家参考。具体如下:

前言

复制代码 代码如下:

WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。Golang
中的 WaitGroup 一直是同步 goroutine
的推荐实践。自己用了两年多也没遇到过什么问题。

var w sync.WaitGroup
w.Add(2)
go func() {
    // do something
    w.Done()
}
go func() {
    // do something
    w.Done()
}
w.Wait()

直到最近的一天同事扔过来一段奇怪的代码:

希望本文所述对大家的Go语言程序设计有所帮助。

第一个坑

您可能感兴趣的文章:

复制代码 代码如下:

package main
 
import (
    “log”
 
    “sync”
)
 
func main() {
    wg := sync.WaitGroup{}
 
    for i := 0; i < 5; i++ {
正规网赌平台,        go func(wg sync.WaitGroup, i int) {
            wg.Add(1)
            log.Printf(“i:%d”, i)
            wg.Done()
        }(wg, i)
    }
 
    wg.Wait()
 
    log.Println(“exit”)
}

撇了一眼,觉得没什么问题。

然而,它的运行结果是这样:

复制代码 代码如下:

2016/11/27 15:12:36 exit
[Finished in 0.7s]

或这样:

复制代码 代码如下:

2016/11/27 15:21:51 i:2
2016/11/27 15:21:51 exit
[Finished in 0.8s]

或这样:

复制代码 代码如下:

2016/11/27 15:22:51 i:3
2016/11/27 15:22:51 i:2
2016/11/27 15:22:51 exit
[Finished in 0.8s]

一度让我以为手上的 mac 也没睡醒……

相关文章