GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
打工仔折腾 AI9 分钟前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger16 分钟前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
蜗牛互联网28 分钟前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
茉莉玫瑰花茶1 小时前
GO [ 泛型 ]
golang
weixin_440730502 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python
苏supper2 小时前
Spring Boot多环境配置与打包运行
spring boot·后端·spring
sugarzhangnotes2 小时前
【无标题】
开发语言·人工智能·python
geovindu2 小时前
rust: Composite Pattern
开发语言·后端·设计模式·rust·组合模式
SearchMan3 小时前
还有人不知道&和&&的区别?
后端
想用offer打牌3 小时前
Personal Agent爆火 - 它到底是个什么
人工智能·后端·ai编程