码迷,mamicode.com
首页 > 其他好文 > 详细

Go channel同步

时间:2015-03-04 11:01:13      阅读:157      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!