GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
阿拉金alakin10 小时前
深入理解 Java 线程池:核心参数、工作流程与常用创建方式
java·开发语言·java-ee
小江的记录本10 小时前
【网络安全】《网络安全三大加密算法结构化知识体系》
java·前端·后端·python·安全·spring·web安全
GetcharZp10 小时前
「干掉 Gin?」极致性能的 Go Web 框架 Fiber:这才是真正的“快”!
后端
slandarer10 小时前
MATLAB | R2026a 更新了哪些有趣的新东西?
开发语言·数据库·matlab
希望永不加班10 小时前
SpringBoot 中 AOP 实现多数据源切换
java·数据库·spring boot·后端·spring
早起傻一天~G10 小时前
vue2+element-UI上传图片封装
开发语言·javascript·ui
耿雨飞10 小时前
Python 后端开发技术博客专栏 | 第 03 篇 面向对象编程进阶 -- 从 SOLID 原则到 Python 特色 OOP
开发语言·python·面向对象·oop
charlie11451419110 小时前
嵌入式现代C++工程实践——第14篇:第二次重构 —— 模板登场,编译时绑定端口和引脚
开发语言·c++·stm32·安全·重构
源码站~10 小时前
基于python的校园代跑(跑腿)系统
开发语言·python
BugShare10 小时前
一个用 Rust 编写的、速度极快的 Python 包和项目管理器
开发语言·python·rust