GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
拽着尾巴的鱼儿1 小时前
spring 动态代理
java·后端·spring
WL_Aurora1 小时前
Java字符输入全攻略
java·开发语言
Rust研习社2 小时前
Rust 的 move 语义,一次讲透
后端·rust·编程语言
IT_陈寒2 小时前
用了Vue的动态组件之后,我被坑得找不着北
前端·人工智能·后端
茉莉玫瑰花茶2 小时前
LangGraph 拓展核心知识点
开发语言·windows·python
老鱼说AI2 小时前
现代 LangChain 开发指南:从 LCEL 原理到企业级 RAG 与 Agent 实战
java·开发语言·人工智能·深度学习·神经网络·算法·机器学习
Michelle80232 小时前
25大数据 11-1 函数
开发语言·python
aini_lovee2 小时前
C#与倍福PLC(通过ADS协议)通信上位机源程序实现
开发语言·c#
undefinedType2 小时前
深入理解 Rails includes:为什么一个 order(users.xxx) 会导致超级 JOIN 性能问题
后端
fie88892 小时前
基于 MATLAB 的前景背景分割系统
开发语言·matlab