GO语言Metex

Mutex互斥锁

Go 复制代码
type Mutex struct{
    state int32 // 0表示未加锁 1表示加锁,原子操作
    sema uint32 // 信号量,用作等待队列
}

Mutex正常模式:

尝试加锁的G会先自旋几次,若获不到锁,则加入等待队列. 正常模式下,自选和等待队列的一起竞争

因为G频繁的挂起和唤醒会导致开销,为了高吞吐

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


前面其他位表示多少个等待者

在正常模式下

自旋的条件,当单核下自旋没意义,或者只有一个P时自旋也没意义.

在多核下,,且至少有一个其他的P在running,且当前P的本地队列为空才可以自旋转.

相关推荐
geovindu5 分钟前
go: Interpreter Pattern
开发语言·设计模式·golang·解释器模式
小白学大数据18 分钟前
面向大规模爬取:Python 全站链接爬虫优化(过滤 + 断点续爬)
开发语言·爬虫·python
良木生香29 分钟前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法
Alice-YUE35 分钟前
【无标题】
开发语言·javascript·ecmascript
折哥的程序人生 · 物流技术专研1 小时前
《Java面试85题图解版(二)》进阶深化中篇:Spring核心 + 数据库进阶
java·后端·spring·面试
TeamDev1 小时前
在 Excel 加载项中嵌入 Web 视图
前端·后端·.net
Mr_愚人派1 小时前
redis_点评详解(02.短信登录-验证码登录注册)
后端
Xidaoapi1 小时前
5分钟让你的Python项目接入GPT-4:从配置到上线的完整指南
后端
叼烟扛炮1 小时前
C++ 知识点17 友元
开发语言·c++·算法·友员
SamDeepThinking1 小时前
写代码不考虑前后兼容,迟早要还的
java·后端·程序员