GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
Wenweno0o1 分钟前
Eino - 从0到1跑通大模型调用
golang·大模型·智能体·eino
ZK_H12 分钟前
半导体工艺流程
java·c语言·开发语言·计算机网络·金融
计算机安禾18 分钟前
【数据结构与算法】第39篇:图论(三):最小生成树——Prim算法与Kruskal算法
开发语言·数据结构·c++·算法·排序算法·图论·visual studio code
liliangcsdn19 分钟前
sentence-transformer如何离线加载和使用模型
开发语言·前端·php
Crazy________20 分钟前
4.10dockerfile构建镜像
java·开发语言
fish_xk22 分钟前
c++内存管理
开发语言·c++·算法
独特的螺狮粉32 分钟前
城市空气质量简易指数查询卡片:鸿蒙Flutter框架 实现的空气质量查询应用
开发语言·flutter·华为·架构·harmonyos
网域小星球33 分钟前
C语言从0入门(八)|函数基础:封装、调用与参数传递精讲
c语言·开发语言
东宇科技38 分钟前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
Dxy123931021640 分钟前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python