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")
}

运行又正常了。

最新文章

  1. 七月十三号CSS3总结《2D的转换》
  2. openvpn安装
  3. Two Strings Are Anagrams
  4. H264编码参数的一些小细节
  5. 【VB】StrConv函数 vbUnicode用法
  6. SQL Server 2008 修改表名
  7. Swift 3.0第1步,面向所有开发者开源
  8. hdu 4465 Candy 2012 成都现场赛
  9. winform实现动态按钮
  10. Android 获取浏览器当前分享页面的截屏
  11. React Native 系列(八) -- 导航
  12. Mybatis入门实例
  13. 使用蒲公英路由器 X3 设置为网络中继器
  14. nginx日志文件的定时切割与归纳
  15. C#中DataTable删除多条数据
  16. 【原】使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)
  17. dom4j读取XML文件内容
  18. ASIHTTPRequest-Cookie的使用[转]
  19. 20145310《Java程序设计》第5次实验报告
  20. P1563 玩具谜题

热门文章

  1. 《深入理解 Java 虚拟机》笔记整理
  2. 【docker】为docker下的php容器安装php-redis扩展【编译安装】
  3. Kafka 2.5.0发布——弃用对Scala2.11的支持
  4. shiro:加密及密码比对器(三)
  5. EF-相关查询(逐渐完善)
  6. mybatis源码学习:一级缓存和二级缓存分析
  7. CSS选择器与CSS的继承,层叠和特殊性
  8. react引入图片不显示问题
  9. Makefile 头文件 &lt;&gt; 与 &quot;&quot; 的差别,与 Visual Studio 不同
  10. ElasticSearch 镜像 &amp; 安装 &amp; 简易集群