GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
共享家95275 分钟前
QT-系统(多线程)
开发语言·数据库·qt
风的归宿5511 分钟前
gitlab配置ai代码审核
后端
格格步入14 分钟前
线上问题:MySQL NULL值引发的投诉
后端·mysql
Moe48820 分钟前
Spring Boot 自动配置核心:AutoConfigurationImportSelector 深度解析
java·后端·设计模式
郝学胜-神的一滴33 分钟前
Effective Python 第52条:用subprocess模块优雅管理子进程
linux·服务器·开发语言·python
武子康34 分钟前
大数据-161 Apache Kylin Cube 实战:建模、构建与查询加速完整指南
大数据·后端·apache kylin
踏浪无痕36 分钟前
准备手写Simple Raft(三) 日志复制——一致性检查
后端·raft
星轨初途37 分钟前
数据结构二叉树之链式结构(3)(下)
c语言·网络·数据结构·经验分享·笔记·后端
valan liya44 分钟前
C++list
开发语言·数据结构·c++·list
Le1Yu1 小时前
订单取消功能(退款功能、策略模式、定时任务)
开发语言