golang中等待所有goroutine执行完成.

栏目: Go · 发布时间: 6年前

内容简介:golang中,创建一个channel并开始执行后便脱离了主程序控制,那么,类似于其他语言中, 多线程中的每个线程join到主线程,golang中 如何等待所有的 goroutine 都执行完毕?查了下大概这个样子.以上.

golang中,创建一个channel并开始执行后便脱离了主程序控制,那么,类似于其他语言中, 多线程中的每个线程join到主线程,golang中 如何等待所有的 goroutine 都执行完毕?

查了下大概这个样子.

  • 用 channel 进行同步
func main() {
    ch := make(chan int, 2)
    go func() {
        for i := 0; i < 10; i++ {
            time.Sleep(1 * time.Second)
            fmt.Println("go routine1", i)
        }
        ch <- 1
    }()
    go func() {
        for i := 0; i < 10; i++ {
            time.Sleep(1 * time.Second)
            fmt.Println("go routine2", i)
        }
        ch <- 2
    }()

    for i := 0; i < 2; i++ {
        <-ch
    }
    fmt.Println("main exit")
}
  • sync.WaitGroup

    官方推荐方法,不需要知道 gotoutine 的个数

import "fmt"
import "time"
import "sync"

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            time.Sleep(1 * time.Second)
            fmt.Println(i)
        }(i)
    }
    wg.Wait() // 等待
    fmt.Println("main exit")
}

以上.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

具体数学(英文版第2版)

具体数学(英文版第2版)

[美] Ronald L. Graham、Donald E. Knuth、Oren Patashnik / 机械工业出版社 / 2002-8 / 49.00元

This book introduces the mathematics that supports advanced computer Programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of ma......一起来看看 《具体数学(英文版第2版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换