GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
D e re k ZH3 分钟前
C++ 模板与泛型编程进阶(No 2)
开发语言·c++
一级新生7 分钟前
LLM _ Agent _ Skill _ 专家 的关系与选型笔记
java·开发语言·人工智能·笔记·大模型·智能体·skill
starzy19908 分钟前
Scala String操作:从插值器到正则的完整指南
开发语言·后端·scala
普通人610 分钟前
CSS-box-sizing-使用指南
开发语言·前端·css·1024程序员节
她说彩礼65万12 分钟前
C# TaskCompletionSource
java·开发语言·c#
eggwyw17 分钟前
C++深入浅出探索数据结构的原理
开发语言·c++
eggwyw19 分钟前
C++深入浅出讲解希尔排序算法的实现
开发语言·c++
starzy199023 分钟前
Scala Array操作:从定长数组到ArrayBuffer的完整指南
开发语言·后端·scala
IT_陈寒23 分钟前
Python项目实战经验分享:为什么你的多进程日志会丢失?
前端·人工智能·后端
念何架构之路34 分钟前
Go 标准库 database/sql 详解
数据库·sql·golang