Go语言WaitGroup使用时索要专注的坑

正文实例深入分析了go语言施行等待直到后台goroutine试行到位的用法。分享给大家供我们参谋。具体如下:

前言

正文实例陈述了Go语言轻量级线程Goroutine用法。分享给咱们供大家参谋。具体如下:

复制代码 代码如下:

WaitGroup在go语言中,用于线程同步,单从字面意思驾驭,wait等待的意味,group组、团队的意思,WaitGroup就是指等待一组,等待三个多级施行到位后才会三翻五次向下试行。Golang
中的 WaitGroup 平昔是一同 goroutine
的引入实践。自身用了七年多也没蒙受过如何难点。

goroutine 是由 Go 运维时意况管理的轻量级线程。
go f(x, y, z)
张开一个新的 goroutine 施行
f(x, y, z)
f,x,y 和 z 是现阶段 goroutine 中定义的,可是在新的 goroutine 中运作
f。
goroutine 在一如此前的地点空间中运转,因而访问分享内存必须举办同步。 sync
提供了这种可能,可是在 Go
中并一时常使用,因为有别的的点子。(未来的内容中会涉及到。)

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 (
    “fmt”
    “runtime”
)
func say(s string) {
    for i := 0; i < 5; i++ {
        runtime.Gosched()
        fmt.Println(s)
    }
}
func main() {
    go say(“world”)
    say(“hello”)
}

您恐怕感兴趣的稿子:

  • Go语言轻量级线程Goroutine用法实例
  • 关于Golang中for-loop与goroutine的主题素材详解

复制代码 代码如下:

指望本文所述对我们的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”)
}

你大概感兴趣的稿子:

  • go语言实践等待直到后台goroutine试行到位实例解析
  • 有关Golang中for-loop与goroutine的标题详解

撇了一眼,感觉不妨难题。

但是,它的运营结果是这么:

复制代码 代码如下:

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

或这样:

发表评论

电子邮件地址不会被公开。 必填项已用*标注