内容简介:这块按照正常理论 没有问题,程序 有时运行也没有错误! 但是这样写不对的如果 锁3 先运行 这问题就没有事儿
package main
import (
"sync"
"time"
. "github.com/soekchl/myUtils"
)
var mux sync.RWMutex
func tt() {
Notice()
mux.Lock() // 3
Notice()
defer mux.Unlock()
time.Sleep(time.Second * 5)
}
func main() {
go tt()
Notice()
mux.RLock() // 1
Notice()
defer mux.RUnlock()
time.Sleep(1 * time.Second)
Notice()
mux.RLock() // 2
Notice()
defer mux.RUnlock()
time.Sleep(5 * time.Second)
}
这块按照正常理论 没有问题,程序 有时运行也没有错误! 但是这样写不对的
如果 锁3 先运行 这问题就没有事儿
但是如果锁 1 先运行 然后 锁3 ,然后 锁2的话 就死锁了
锁1 运行的时候 申请所 成功
然后 锁3 排队申请锁
然后是 锁2
因为锁2 排在 锁3 后面 所以 锁1的 defer 锁还没能运行 锁3 一直申请不下来,锁2也 一直排队下去 然后就死锁了!
大家在用锁的时候 特别要小心,特别是跟 defer 一起用的时候
我的建议是吧 带锁的操作 放进 一个 小函数里 解决,不要再大一点的函数里 写 大量的 锁和defer 解锁。
每天坚持学习1小时 Go 语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!
社区交流群:221273219
Golang语言社区论坛 :
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclassGolang语言社区
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用poll机制处理多连接
- 使用select机制处理多连接
- Zeppelin 安全机制之 Credentials 使用技巧(补充)
- 使用Docker快速体验MySQL半同步复制机制
- Android Handler机制理解和AsyncTask使用小记
- golang goroutine协程运行机制及使用详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python高性能(第2版)
[加] 加布丽埃勒•拉纳诺(Gabriele Lanaro) / 袁国忠 / 人民邮电出版社 / 2018-8 / 59.00元
本书是一本Python性能提升指南,展示了如何利用Python的原生库以及丰富的第三方库来构建健壮的应用程序。书中阐释了如何利用各种剖析器来找出Python应用程序的性能瓶颈,并应用正确的算法和高效的数据结构来解决它们;介绍了如何有效地利用NumPy、Pandas和Cython高性能地执行数值计算;解释了异步编程的相关概念,以及如何利用响应式编程实现响应式应用程序;概述了并行编程的概念,并论述了如......一起来看看 《Python高性能(第2版)》 这本书的介绍吧!