go 死锁示例
以下代码不会有任何打印。原因是:channel ch 在make 时是无缓冲区的channel。无缓冲区的channel 发送一个数据进入后需要等待这个数据被消耗才能继续发送下一个数据。然而getFromChannel 方法中的使用了锁。导致与sendToChannel 方法中使用的锁,形成死锁。如果指定ch 的缓冲区长度为10,则可以避免。当然也可以取消sendToChannel 方法中的锁。
var ch chan int
var mutex sync.Mutex
func main() {
ch = make(chan int)
go getFromChannel()
go sendToChannel()
select {
}
}
func sendToChannel() {
mutex.Lock()
for i := 0; i < 10; i ++ {
ch <- i
}
mutex.Unlock()
}
func getFromChannel() {
for {
select {
case c := <- ch:
mutex.Lock()
fmt.Println(c)
mutex.Unlock()
}
}
}
go 死锁示例的更多相关文章
- mysql死锁示例
MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的是页面锁(page-level locki ...
- java死锁示例及其发现方法
在java多线程编程中很容易出现死锁,死锁就是多个线程相互之间永久性的等待对方释放锁,这和数据库多个会话之间的死锁类似.下面的代码示例了一个最简单的死锁的例子,线程1和线程2相互之间等待对方释放锁来取 ...
- 嵌入式 GDB调试死锁示例
死锁:一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被 其他线程占用并堵塞了的资源.例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线 ...
- 一个简单的Java死锁示例(转)
在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了 ...
- mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)
一. 什么时候使用表锁 对于INNODB表,在绝大部分情况下都应该使用行锁.在个别特殊事务中,可以考虑使用表锁(建议). 1. 事务需要更新大部份或全部数据,表又比较大,默认的行锁不仅使这个事务执行效 ...
- c#死锁示例代码
void Main() { object obj1 = new object(); object obj2 = new object(); var t1 = new Thread(delegate(o ...
- Python中死锁的形成示例及死锁情况的防止
死锁示例搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用Python直观的演示一下.死锁的一个原因是互斥锁.假设银行系统中,用户a试图转账100块给用户b,与此同时用户b ...
- 使用SQL Server 扩展事件来创建死锁的时间跟踪
我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过“Object Explorer”连接 ...
- 深入浅出SQL Server中的死锁
简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...
- SQL Server中的死锁
简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...
随机推荐
- PS设计非常漂亮酷炫的金色字体效果
方法/步骤 1.在PS里面新建一个黑色背景 2.在图层上 写上比较粗一点的字. 3.鼠标右击图层,选择混合模式,进行调整. 选择颜色叠加,注意颜色是深黄色. 4.转移到混合模式里面的渐变叠加,渐变的颜 ...
- Qt 中文编译错误和运行显示乱码
Qt 中文编译错误 Qt error: C2001: 常量中有换行符 解决方法:菜单 --> 编辑 --> 选择编码(select Encoding)--> 文本编码 --> ...
- python 给视频加入音频
1.先去查查 ffmpeg 这个东西 贼强 # 附上大佬博客 https://blog.csdn.net/qq_39752726/article/details/ 104263381?utm ...
- nohup--将程序放入后台执行
作用:可以将程序以忽略挂起信号的方式运行,常与&一起使用 语法: nohup Command [ Arg - ] [ & ] 将程序放到后台运行的方法: command & ...
- JS中立即执行函数和闭包的区别
函数声明规则:必须指定一个函数名字 foo(); function foo() { console.log("函数声明") } 由于函数声明会被提升,所以调用函数可以在之前或之后调 ...
- 【React】React项目实践中的问题
报错'react-scripts' 不是内部或外部命令,也不是可运行的程序 React新建脚手架项目,在目录下添加了public\index.html,src\App.js,index.js文件,除此 ...
- pip install -r 是什么意思
我们经常使用python安装第三方库的的命令是 pip install xxx; 但是有一天,突然要执行的命令是: pip install -r requirements.txt,突然就不知道是什么意 ...
- 【git】2.3查看提交历史
资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4% ...
- 攻防世界-Web_php_include(data协议)
一道简单的文件包含题目 分析代码可知php://被ban了 此题可以用data://协议 payload为(以下两者皆可使用) ?page=data://text/plain,<?php%20s ...
- lua-1-c# 执行lua文件-调用lua文件中的方法
using UnityEngine;using System.Collections;using LuaInterface;//引入lua接口public class MyHellowWorld : ...