GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
喜欢打篮球的普通人5 分钟前
Trition程序编写:从“Hello CUDA“到“Hello Triton“:向量加法背后的编译黑魔法
开发语言·后端·rust
code_std7 分钟前
java WebSocket 使用
java·开发语言·websocket
苏三说技术12 分钟前
Spring AI 2.0和Spring AI Alibaba,哪个更好?
后端
用户67570498850212 分钟前
还在用字符串返回错误提示?Go语言优雅错误处理的正确姿势!
后端·go
gihigo199817 分钟前
FastSLAM2.0(精度优于1.0)MATLAB 实现
开发语言·matlab
Yolo566Q19 分钟前
Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术应用
开发语言·python
落叶-IT21 分钟前
Java Scanner 类精讲:控制台交互
java·开发语言
雪隐25 分钟前
用Flutter做背单词APP-02我画了设计稿,然后让AI帮我设计了数据库(顺便聊了会天)
前端·人工智能·后端
chh56327 分钟前
C++--string
java·开发语言·网络·c++·学习
梦想的旅途229 分钟前
企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案
java·开发语言·数据库·机器人·自动化·企业微信