GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
小码哥_常15 分钟前
Spring Boot 牵手Spring AI,玩转DeepSeek大模型
后端
0xDevNull32 分钟前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮0135 分钟前
Next.js基础
开发语言·前端·javascript
华洛42 分钟前
我用AI做了一个48秒的真人精品漫剧,不难也不贵
前端·javascript·后端
ALex_zry1 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
WZTTMoon1 小时前
Spring Boot 中Servlet、Filter、Listener 四种注册方式全解析
spring boot·后端·servlet
standovon1 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
Amumu121381 小时前
Js:正则表达式(二)
开发语言·javascript·正则表达式
Sgf2272 小时前
ES8(ES2017)新特性完整指南
开发语言·javascript·ecmascript
Cosolar2 小时前
LlamaIndex RAG 本地部署+API服务,快速搭建一个知识库检索助手
后端·openai·ai编程