sync.waitgroup

149 阅读1分钟

waitgroup

waitgroup是在sync包中要求主线程等待其他协程完成他们的任务

什么是协程

很有趣,协程是另一种执行,相当于java的线程(一个线程可以有多个协程)

main实际上也是协程的一种,所以一个golang语言应该至少有一个协程

package main
​
import "fmt"func task(msg string) {
    for i := 0; i < 10; i++ {
        fmt.Println(msg)
    }
}
​
func main() {
    go task("hello")
    go task("world")
}
​

运行之后可以看到,根本没有实现,直接就退出了

因为main没有等待两个go的结束,就直接退出了

(main是个特殊的go程,当main结束的时候,所有对应的协程都会结束,和一般并行的go程不一样嗷~)

用法

  1. sync.add(1) 表明除主main之后的协程,协程数目+1
  2. syn.done() 表示除主main之后的协程,协程数目-1
  3. syn.wait()表明等待所有协程结束退出

所以上面的程序就可以改造为: