GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
执明wa13 分钟前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
xuanWb19 分钟前
手写一个 LLM API 网关:Anthropic 与 OpenAI 协议转换的完整实现
后端
苍何28 分钟前
给 Codex 换皮肤这门生意,被我开源了
后端
用户83562907805128 分钟前
Python 实现 Excel 命名范围(Named Range)的创建与管理
后端·python
程序员David38 分钟前
我让 Claude 从架构文档一路干到代码,踩了三个坑才摸清边界
后端
Zane199438 分钟前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
神奇小汤圆1 小时前
线程池拒绝策略CallerRunsPolicy反而卡死了主线程
后端
神奇小汤圆1 小时前
Jaws:从零构建一个”五脏俱全”的 Java RPC 框架
后端
Csvn1 小时前
📊 SQL 入门 Day 10:递归 CTE — 破解无限层级查询的终极武器
后端·sql
echohelloworld111 小时前
HarmonyOS开发实战:小分享-CreateSelectPage创建分享类型选择器
后端