golang之channel
2024-08-22 22:31:00
Buffered Channels
package main import "fmt" func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
fmt.Println(<-ch)
fmt.Println(<-ch)
}
如果操作一个空的channel会怎么样呢?
package main import "fmt" func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
fmt.Println(<-ch)
fmt.Println(<-ch) v, ok := <-ch
fmt.Println(v,ok)
}
fatal error: all goroutines are asleep - deadlock!
如果make函数不指定buffer length,会怎么样呢?
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
fatal error: all goroutines are asleep - deadlock!
上述例子中sender,receiver都是同一个线程。
如果sender,receiver是不同线程会怎么样呢?
package main import "fmt"
import "time" func WriteChannel(c chan int, v int) {
fmt.Printf("write %d to channel\n", v)
c <- v
}
func main() {
c := make(chan int) go WriteChannel(c,1)
fmt.Println(<-c) time.Sleep(100 * time.Millisecond)
fmt.Printf("Done\n")
}
运行又正常了。
最新文章
- 七月十三号CSS3总结《2D的转换》
- openvpn安装
- Two Strings Are Anagrams
- H264编码参数的一些小细节
- 【VB】StrConv函数 vbUnicode用法
- SQL Server 2008 修改表名
- Swift 3.0第1步,面向所有开发者开源
- hdu 4465 Candy 2012 成都现场赛
- winform实现动态按钮
- Android 获取浏览器当前分享页面的截屏
- React Native 系列(八) -- 导航
- Mybatis入门实例
- 使用蒲公英路由器 X3 设置为网络中继器
- nginx日志文件的定时切割与归纳
- C#中DataTable删除多条数据
- 【原】使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)
- dom4j读取XML文件内容
- ASIHTTPRequest-Cookie的使用[转]
- 20145310《Java程序设计》第5次实验报告
- P1563 玩具谜题
热门文章
- 《深入理解 Java 虚拟机》笔记整理
- 【docker】为docker下的php容器安装php-redis扩展【编译安装】
- Kafka 2.5.0发布——弃用对Scala2.11的支持
- shiro:加密及密码比对器(三)
- EF-相关查询(逐渐完善)
- mybatis源码学习:一级缓存和二级缓存分析
- CSS选择器与CSS的继承,层叠和特殊性
- react引入图片不显示问题
- Makefile 头文件 <;>; 与 ";"; 的差别,与 Visual Studio 不同
- ElasticSearch 镜像 &; 安装 &; 简易集群