GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
光影少年5 分钟前
RN 架构:JS层、原生桥接层、原生渲染层 通信原理
开发语言·javascript·架构
用户693717500138417 分钟前
AI Agent 里的 Loop 到底是什么?
android·前端·后端
ALex_zry21 分钟前
C++26 std::inplace_vector 详解:零堆分配的定容向量
开发语言·c++
Rain的Java大神之路25 分钟前
高并发下的抢优惠券如何设计
后端
钟智强29 分钟前
AWS CloudGoat 实战:一个 SSRF 如何撬动整个云账户
后端
Ai拆代码的曹操29 分钟前
@Transactional 写在 private 方法上,事务根本没生效
后端
云技纵横33 分钟前
@Async 默认执行器又炸了:SimpleAsyncTaskExecutor 为什么不是线程池?
后端·面试
许彰午34 分钟前
77_Python数据清洗实战技巧
开发语言·python
程序员Agions34 分钟前
Fypro 新手快速上手与实战指南
后端
舒心的云朵38 分钟前
用三张图片详解Asp.Net 全生命周期
后端·asp.net