GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
starzy19904 分钟前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy199010 分钟前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一19 分钟前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
YSL07012431 分钟前
C++基础
开发语言·c++
小满zs33 分钟前
Go语言第十八章(架构设计)
后端·go
若亦_38 分钟前
Java中关于this的三种用法
java·开发语言·intellij-idea
山甫aa40 分钟前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
2601_968793141 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化
IT_陈寒1 小时前
Java开发实战:从入门到精通
前端·人工智能·后端
eggwyw1 小时前
关于C++为什么不加入垃圾回收机制解析
开发语言·c++