GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
Albert Edison2 分钟前
【ProtoBuf】初识 protobuf
java·开发语言·protobuf
zh_xuan1 小时前
kotlin 尾随Lambda表达式函数的常用简写
开发语言·kotlin
沐知全栈开发8 小时前
Perl 数据库连接
开发语言
森叶9 小时前
Java 比 Python 高性能的原因:重点在高并发方面
java·开发语言·python
qq_316837759 小时前
uni.chooseMedia 读取base64 或 二进制
开发语言·前端·javascript
方圆工作室9 小时前
【C语言图形学】用*号绘制完美圆的三种算法详解与实现【AI】
c语言·开发语言·算法
小二·9 小时前
Python Web 开发进阶实战:混沌工程初探 —— 主动注入故障,构建高韧性系统
开发语言·前端·python
Lkygo9 小时前
LlamaIndex使用指南
linux·开发语言·python·llama
进阶小白猿9 小时前
Java技术八股学习Day20
java·开发语言·学习
代码村新手10 小时前
C++-类和对象(中)
java·开发语言·c++