最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Golang并发编程中控制主goroutine退出实现的例子
时间:2016-03-10 编辑:简简单单 来源:一聚教程网
在使用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()
}
相关文章
- C#复制数组的两种方式及效率比较解读 10-24
- ASP.NET Identity用法解析 10-24
- ASP.NET MVC使用Identity增删改查用户介绍 10-24
- C语言中atoi函数模拟实现介绍 10-18
- .Net反向代理组件Yarp用法介绍 10-10
- .NET使用YARP通过编码方式配置域名转发实现反向代理教程 10-10