《Go语言实战》笔记之协程同步 sync.WaitGroup

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

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

 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 mainimport (   "fmt"   "sync")var wg sync.WaitGroupfunc printerOne(ch chan int)  {   for i := range ch{      fmt.Printf("printerOne: %v\n" , i)   }   // 申明当前goroutine完成   wg.Done()}func printerTwo(ch chan int)  {   for i := range ch{      fmt.Printf("printerTwo: %v\n" , 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>
相关文章
相关标签/搜索