死锁:

 - 单个协程永久阻塞

 - 两个或两个以上的协程执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象。

channel 死锁场景:

 - 非缓存channel只写不读

 - 非缓存channel读在写后面

 - 缓存channel写入超过缓冲区数量

 - 空读

 - 多个协程互相等待

1、非缓存chanel只写不读

func deadlock1(){
ch :=make(chan int)
ch <-3 //这里会发生一直阻塞的情况,执行不到下一句
}

2、非缓存channel读在写后面

func deadlock2(){
ch :=make(chan int)
ch <-3
num :=<-ch
fmt.Println("nums",num)
}
func deadlocak2(){
ch1 :=make(chan int)\
ch <-100 //这里会发生一直阻塞的情况,执行不到下一句
go func() {
num := <-ch
fmt.Println("num=",num)
}()
time.Sleep(time.Second)
}

3、缓存channel写入超过缓冲区数量

func deadlock3(){
ch :=make(chan int, 3)
ch <- 3
ch <- 4
ch <- 5
ch <- 6 //这里会发生一直阻塞的情况
}

4、空读

func deadlock4(){
ch :=make(chan int)
fmt.Println(<-ch) // 这里会发生一直阻塞的情况
}

5、多个协程一直等待

func deadlocak5() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
for {
select {
case num := <-ch1:
fmt.Println("num=",num)
ch2 <- 100
}
}
}()
for {
select {
case num := <-ch2:
fmt.Println("num=",num)
ch1 <- 300
}
}
}

最新文章

  1. Javascript中addEventListener和attachEvent的区别
  2. 老生长谈:css实现右侧固定宽度,左侧宽度自适应
  3. 为什么接口类型可以直接new?
  4. 岛屿(洛谷 U5399)
  5. Java Hour 24 JDBC
  6. 将Excel中数据导入数据库(一)
  7. Android 核心分析 之七Service深入分析
  8. C# 数据类型详解
  9. 在QTableView中使用各种自定义委托
  10. UE32修改TAB键为空格键
  11. shiro真正项目中的实战应用核心代码!!!
  12. python虚拟环境搭建大全(转)
  13. [HNOI2008]玩具装箱TOY
  14. SpringBoot(七):SpringBoot整合Swagger2
  15. HTML解析之BeautifulSoup
  16. Shell文件权限-1
  17. Intellij新安装初始化配置
  18. QT pro文件详细写法+实例
  19. 前端学习 -- Html&amp;Css -- 框架集
  20. Gauss error function

热门文章

  1. 前端知识之JS(javascirpt)
  2. Kubernetes监控手册-01体系概述
  3. django.db.migrations.exceptions.NodeNotFoundError: Migration apitest.0001_initial dependencies reference nonexistent parent node (&#39;product&#39;, &#39;0001_initial&#39;)
  4. Django重点及面试题
  5. 1+x初级Web的关键词填写
  6. Elasticsearch查询及聚合类DSL语句宝典
  7. Python实验报告(第9章)
  8. 手写Pinia存储的数据持久化插件
  9. Typora + PicGo + B2 Cloud Storage 实现个人免费图床
  10. 使用插件式开发称重仪表驱动,RS232串口对接各类地磅秤数据实现ERP管理