GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
WYH2872 分钟前
为什么在cubeide里勾选了can1,生成的工程里没有can.c?
c语言·开发语言
5 分钟前
java关于键盘录入
java·开发语言
马猴烧酒.7 分钟前
JAVA后端对象存储( 图片分享平台)详解
java·开发语言·spring·腾讯云
梅梅绵绵冰9 分钟前
springboot初步2
java·spring boot·后端
wearegogog12317 分钟前
基于MATLAB的D2D仿真场景实现
开发语言·网络·matlab
froginwe1119 分钟前
Chart.js 散点图详解
开发语言
独自破碎E21 分钟前
【纵向扫描】最长公共前缀
java·开发语言
nuo53420227 分钟前
C语言实现类似面向对象的三大特性
c语言·开发语言
321.。30 分钟前
深入理解 Linux 线程封装:从 pthread 到 C++ 面向对象实现
linux·开发语言·c++
zfoo-framework35 分钟前
kotlin
android·开发语言·kotlin