Go7

goroutine wait

This project is maintained by wangfakang

golang多协成的wait操作管理

WaitGroup的用途:

它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。

WaitGroup总共有三个方法:

实列:

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i = i + 1 {
        wg.Add(1)
        go func(n int) {
            // defer wg.Done()
            defer wg.Add(-1)
            mygoroutine(n)
        }(i)
    }

    wg.Wait()
}

func mygoroutine(i int) {
    time.Sleep(2*time.Second)
    fmt.Println(i)
}

输出结果:

0
1
2
3
4

上面的demo就是一个在四个协成中输出数字,注意如果没有在主协成中进行wait操作饿话是看不到输出结果的, 原因就是此时main会早于协成的结束导致当前的会话关闭.

其实除了上面这种方法来进行多协成之间的同步还可以使用chanel来进行控制.

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author