zoukankan      html  css  js  c++  java
  • 《Go语言实战》笔记之协程同步 sync.WaitGroup

    原文地址(欢迎互换友链):

    http://www.niu12.com/article/8

     sync 包提供同步 goroutine 的功能

    <p>文档介绍</p>
    <code>
    // A WaitGroup waits for a collection of goroutines to finish.
    // The main goroutine calls Add to set the number of
    // goroutines to wait for. Then each of the goroutines
    // runs and calls Done when finished. At the same time,
    // Wait can be used to block until all goroutines have finished.
    //
    // A WaitGroup must not be copied after first use.
    翻译
    一个WaitGroup等待一个goroutines集合的完成,
    main(goroutines)调用Add()方法设置需要等到的goroutine熟练
    然后执行每一个goroutine,并且完成时调用Done()方法
    与此同时,Wait()方法可以用来锁住main(goroutines)直到所有goroutine完成

    首次使用后不得复制WaitGroup
    </code>

    <p>实例代码</p>
    <code>
    package main

    import (
    "fmt"
    "sync"
    )
    var wg sync.WaitGroup

    func printerOne(ch chan int) {
    for i := range ch{
    fmt.Printf("printerOne: %v " , i)
    }
    // 申明当前goroutine完成
    wg.Done()
    }

    func printerTwo(ch chan int) {
    for i := range ch{
    fmt.Printf("printerTwo: %v " , i)

    }
    // 申明当前goroutine完成
    wg.Done()
    }

    func main() {
    // 申明一个channel c
    c := make(chan int)

    // 申明有两个goroutine需要执行
    wg.Add(2)

    // 执行goroutine
    go printerOne(c)
    go printerTwo(c)

    // 向channel c发送数据
    for i:=0; i < 10; i++ {
    c <- i
    }
    // 关闭channel c
    close(c)
    // 等待goroutine全部完成
    wg.Wait()
    }
    </code>
  • 相关阅读:
    Block编程
    自己写Web服务器(续)
    C# 2.0对现有语法的改进
    使用CDN
    优化网站设计(一):减少请求数
    MongoDB Shell的使用
    memcache 和appfabric
    go语言中几个有趣的特性以及对go的看法
    bpm流程平台
    Socket编程 (异步通讯) (Tcp,Udp)Part2
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/10247696.html
Copyright © 2011-2022 走看看