GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
半兽先生1 分钟前
使用 retire.js 自动检测前端 JavaScript 库漏洞
开发语言·前端·javascript
之歆1 小时前
HA 高可用集群指南
java·开发语言
lsx2024061 小时前
电子商务网站主机:选择与维护指南
开发语言
wangluoqi2 小时前
c++ 逆元 小总结
开发语言·c++
BackCatK Chen2 小时前
第十五章 吃透C语言结构与数据形式:struct/union/typedef全解析
c语言·开发语言·数据结构·typedef·结构体·函数指针·联合体
瓦特what?2 小时前
插 入 排 序
开发语言·c++
Je1lyfish2 小时前
CMU15-445 (2026 Spring) Project#1 - Buffer Pool Manager
linux·数据库·c++·后端·链表·课程设计·数据库架构
hrhcode2 小时前
【Netty】三.ChannelPipeline与ChannelHandler责任链深度解析
java·后端·spring·springboot·netty
m0_531237172 小时前
C语言-初始化赋值,函数,变量的作用域与生命周期
c语言·开发语言
张3蜂2 小时前
Python venv 详解:为什么要用、怎么用、怎么用好
开发语言·python