GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
IT_陈寒几秒前
React性能优化踩的坑,这个错你可能也会犯
前端·人工智能·后端
zhangxingchao13 分钟前
AI应用开发三:RAG技术与应用
前端·人工智能·后端
摘星小杨22 分钟前
如何在前端循环调取接口,实时查询数据
开发语言·前端·javascript
yujunl24 分钟前
U9的UI插件客开的总结1
开发语言
多敲代码防脱发1 小时前
Spring进阶(容器实现)
java·开发语言·后端·spring
可视之道1 小时前
工业物联网前端技术栈选型与性能优化实战
后端
星辰_mya1 小时前
彩云之上——[特殊字符]的架构师
java·后端·微服务·面试·架构
小新同学^O^1 小时前
简单学习 --> 模型微调
开发语言·人工智能·python·模型微淘
水云桐程序员1 小时前
C++变量的概念及用法
开发语言·c++
LucianaiB1 小时前
参加高德 AI 发布会的一点感受:地图,正在变成 AI 的行动入口
后端