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

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

内容简介: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")
}

以上.


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

查看所有标签

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

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器