IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Golang中控制主goroutine退出实现

    mckee发表于 2016-03-02 01:44:27
    love 0

    在使用golang进行并发编程的时候,当你新起goroutine异步执行时,主goroutine并不知道其它goroutine是否运行完毕,一旦主goroutine退出后,所有的goroutine都会退出,因此需要控制主goroutine退出时间,可有如下方法:
    (1)time.Sleep()
    比较粗暴,不靠谱,就是让主
    goroutine多跑一会儿,实际并不确定其它goroutine是否运行结束.
    (2)利用channel通信
    在主goroutine一直阻塞等待一个退出信号,在其他goroutine完成任务后给主协程发送一个信号,主协程收到这个信号后退出

    e := make(chan bool)
     go func() {
          fmt.Println("hello")
          e <- true
     }()
     <-e

    (3)利用sync.WaitGroup
    WaitGroup,它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine(Golang中并发执行的协程)执行完成。

     var wg sync.WaitGroup
         func main() {
              wg.Add(1)
              go func() {
                   fmt.Println("hello")
                   wg.Done() //完成
              }()
              wg.Wait()
         }



沪ICP备19023445号-2号
友情链接