Go channel同步
我们可以使用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, )
//开启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同步的更多相关文章
- golang的缓冲channel和无缓冲channel的区别
话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别....靠 转载一段网上的资料 --------------------- ...
- 2.7 Go channel
channel简单示例 package main import ( "fmt" "time" ) //channel的创建,发送,接收 func channe1 ...
- mysql数据库同步系统otter部署实践(中国与欧洲同步)
otter的介绍就不说了, 自己去看官网https://github.com/alibaba/otter/wiki 本系统中, 中国的服务器部署在阿里云上, 欧洲服务器部署在亚马逊上, 由于阿里云的网 ...
- 【GoLang】golang 最佳实践汇总
最佳实践 1 包管理 1.1 使用包管理对Golang项目进行管理,如:godep/vendor等工具 1.2 main/init函数使用,init函数参考python 1.2.1 main-> ...
- 【Go】为什么用go; Golang Erlang 前世今生
给自己一条退路,再次比较Erlang和Golang 2014-6-28 陈叶皓 chenyehao@gmail.com 雨天的周末,适合码字的时节... 一年前我开始学习go语言的时候,如获至宝,既有 ...
- Go - concurrency
并发 vs 并行 首先,我们先来搞清楚概念以及并发和并行的区别. 并发 - 利用时间片切换来实现“同时”运行的. 并行 - 利用CPU的多核来实现通过多线程来实现同时运行. Go 语言的设计理念就是通 ...
- Flutter 实现原理及在马蜂窝的跨平台开发实践
一直以来,跨平台开发都是困扰移动客户端开发的难题. 在马蜂窝旅游 App 很多业务场景里,我们尝试过一些主流的跨平台开发解决方案, 比如 WebView 和 React Native,来提升开发效率和 ...
- main函数中如何等待协程运行完毕
使用channel同步 package main import ( "fmt" ) func printNumber(num int, c chan struct{}) { fmt ...
- Go初探
官方网站:https://golang.org/ 标准库文档:https://golang.org/pkg/ 在线编码学习:https://play.golang.org/ PS:请自行FQ 简介 ...
随机推荐
- 检测zookeeper和kafka是否正常
cd $(dirname $) source ~/.bash_profile count_zoo=`ps -ef | grep "config/zookeeper.properties&qu ...
- python其中一个子线程,则退出全部线程,再退出进程
import threading, signal is_exit = False def write_login(self): global is_exit write_log('login rsyn ...
- css定义表格样式
table.gridtable { font-family: verdana,arial,sans-serif; font-size:11px; color:#333333; border-width ...
- 织梦dedecms中html和xml格式的网站地图sitemap制作方法
sitemap是网站上各网页的列表.创建并提交sitemap有助于百度(Google)发现并了解您网站上的所有网页,包括百度通过传统抓取方式可能找不到的网页.还可以使用sitemap提供有关你网站的其 ...
- Java语法细节(2)
1.逻辑运算符 &和&&,|和||的区别 &&:和&的结果是一样的,但运算过程有区别 &&:只要左边结果为假,就不再执行右边的,结果为假 ...
- IE样式兼容写法
1.第一种写法 利用<!--[if lt IE 6/7/8/9/10/11]><![endif]-->,给每个html写一个class <!DOCTYPE html> ...
- poj2017
一天两个题,凑数用的大水题啊...不解释了..羞愧ing #include <stdio.h> int main(){ int t; int i; ],b[],tot; ){ tot=; ...
- 第六章_PHP数组(二)
这篇随笔是对预定义数组变量的总结.通过预定义数组变量,我们可以获得系统环境.用户对话.表单数据等信息. 1.服务器变量:$_SERVER 利用foreach语句打印$_SERVER中的所有元素: &l ...
- 使用Spring开发第一个HelloWorld应用
http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Eclips ...
- MAC OS下免费下载YouTube
YouTube上有很多不错的视频,你感兴趣的视频除了可以加入自己播放列表之外,还可以将其下载到本地收藏起来.推荐这款软件“Xilisoft Download YouTube Video for Mac ...