TreeviewCopyright © aleen42 all right reserved, powered by aleen42

waitgroup

入门example

import (
        "sync"
        "fmt"
)
func main() {
    var wg sync.WaitGroup
    for i :=0 ;i<5;i++{
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Println(i)
        }(i)
    }
    wg.Wait()
}

上面的方法,var wg sync.WaitGroup 其实一个坑,需要注意,因为传参是值传递,这会导致问题 譬如下面代码

go func(text string,ch chan map[string]int, wg sync.WaitGroup){
            defer wg.Done()

            m := make(map[string]int)
            ch <-m
            fmt.Println("abc")

        }(array[i],ch,wg)//值传递wg

这就会导致死锁,所以通用的解决办法是

var wg = &sync.WaitGroup{}

这样创建的是指针,那么久不存在上面的问题了。函数解释 wg *sync.WaitGroup的传参即可。

results matching ""

    No results matching ""