GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
黑客思维者8 小时前
Python自动化测试Pytest/Unittest深度解析与接口测试落地实践
开发语言·python·pytest·unittest
muyouking118 小时前
Zig 模块系统详解:从文件到命名空间,与 Rust 的模块哲学对比
开发语言·后端·rust
wbs_scy8 小时前
C++ :Stack 与 Queue 完全使用指南(基础操作 + 经典场景 + 实战习题)
开发语言·c++
大肚子飞行员8 小时前
基于arthas的一次提升定时任务TPS总结
后端·性能优化
我要升天!8 小时前
QT -- QSS界面优化
开发语言·c++·qt
是Dream呀8 小时前
无硬件模拟灵衢架构:基于openFuyao社区的UB组件一站式开发实践
后端
JANGHIGH8 小时前
c++ 多线程(四)
开发语言·c++
小尧嵌入式8 小时前
C++模板
开发语言·c++·算法
码界奇点8 小时前
基于Django REST framework与Vue的前后端分离后台管理系统设计与实现
vue.js·后端·python·django·毕业设计·源代码管理
疯狂的程序猴9 小时前
构建现代化 iOS 调试体系,从代码行为到系统级诊断的多工具协同方法论
后端