GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
游乐码2 分钟前
c#lambad表达式
开发语言·c#
weixin_4080996718 分钟前
python请求文字识别ocr api
开发语言·人工智能·后端·python·ocr·api·ocr文字识别
weixin_4080996720 分钟前
【组合实战】OCR + 图片去水印 API:自动清洗图片再识别文字(完整方案 + 代码示例)
图像处理·后端·ocr·api·文字识别·去水印·ocr识别优化
不爱吃炸鸡柳23 分钟前
C++ 进阶:unordered_map 与 unordered_set 超全详解(哈希容器实战)
开发语言·c++·哈希算法
gelald33 分钟前
SpringBoot - Actuator与监控
java·spring boot·后端
码云数智-大飞34 分钟前
Go并发编程避坑指南:如何彻底解决死锁(Deadlock)问题
开发语言
用户5853437884335 分钟前
AI Harness Engineering:从概念、场景到落地方法
人工智能·后端
无语......1 小时前
安装uv并管理 Python / 包
开发语言·python·uv
uzong1 小时前
不懂拆分的架构师,如何谈架构设计
后端·架构