美文网首页
golang sync.WaitGroup使用示例

golang sync.WaitGroup使用示例

作者: 一只肥豚鼠 | 来源:发表于2019-02-15 19:23 被阅读14次

    golang中同步方式

    golang中有2种方式同步程序

    1. 一种使用channel
    2. 另一种使用锁机制。

    sync.WaitGroup方法

    sync.WaitGroup只有3个方法:

    1. Add()
    2. Done()
    3. Wait()

    其中Done()是Add(-1)的别名。
    简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。

    要注意的有一点。sync文档已经说明了的,The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished.也就是说,在运行main函数的goroutine里运行Add()函数,在其他的goroutine里面运行Done()函数。这个我是踩过雷了的。
    最简单的案例就是sync文档里面的example,这里简单写了一个例子。

    package main
    
    import (
        "fmt"
        "time"
        "sync"
    )
    var wg sync.WaitGroup
    func main() {
    
        for i := 0; i < 100; i++ {
            wg.Add(1)
            go fun(i)
        }
        fmt.Println("exit")
        wg.Wait()
    }
    
    func fun(i int)  {
        time.Sleep(time.Second * 2)
        fmt.Println(i)
        wg.Done()
    }
    

    相关文章

      网友评论

          本文标题:golang sync.WaitGroup使用示例

          本文链接:https://www.haomeiwen.com/subject/jvwmeqtx.html