首页 > 其他 > 详细

Go channel同步

时间:2015-03-04 10:59:43      阅读:278      评论:0      收藏:0      [点我收藏+]

我们可以使用Channel来同步不同goroutines的执行。看下面的代码:

package main

 

import "fmt"

import "time"

 

//这个函数会在新的goroutine中运行,执行结束时会给done channel中传入值true

//注意到中间有sleep了一秒

func worker(done chan bool) {

fmt.Print("working...")

time.Sleep(time.Second)

fmt.Println("done")

 

//channel中传入值true

done <- true

}

 

func main() {

 

//创建一个channel,用于goroutine之间通知情况

done := make(chan bool, 1)

//开启goroutine,并把done channel传进去

go worker(done)

 

//如果done channel中一直没有数据,这里就会卡住,直到worker结束时传入值以后,这里才会继续执行

<-done

}

 

 

运行结果:


working...done

 

如果我们把main函数最后一句代码:<-done,去掉以后,不会输出任何数据。

因为主线程已经执行完退出了,goroutine依赖于主现程,也会退出。用古话说是:

皮之不存,毛將焉附?

覆巢之下,安有完卵?

国之不存,何以家为?

 

问题:

A主线程启动B1 B2 两个goroutine,B1 启动了C11 C12两个goroutine。如果B1执行结束,C11 C12会退出吗?

结论:不会

Go channel同步

原文:http://www.cnblogs.com/baiyuxiong/p/4312698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!