go 死锁示例
2024-09-08 19:41:20
以下代码不会有任何打印。原因是: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()
}
}
}
最新文章
- Android View的几个位置坐标关系
- 学习Jquery
- PHP判断手机号码是否合法
- POJ 1027 The Same Game(模拟)
- hdu 4850 Wow! Such String! 欧拉回路
- Ubuntu12.04 下搭建Java开发环境
- for-in用法
- 【翻译】Ext JS最新技巧——2014-10-30
- canvas的学习
- HDU1789 Doing Homework again
- Linux学习之CentOS(十八)-----恢复Ext3下被删除的文件与 使用grep恢复被删文件内容(转)
- require.js使用步骤
- Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器
- NOIP-无线网路发射器选址
- 电脑忘记WiFi密码了,但又想知道,该怎么办?
- 升级linux python
- color xml arm相关
- codeforces 957 C Three-level Laser
- chrome插件 - Manifest文件中的 background
- ASP.NET Core Linux环境安装并运行项目