DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Golang

Go sync.Mutex 源码解析:自旋、饥饿模式与状态位设计

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

Mutex 底层是 state 字段(int32)+ sema(信号量)。状态位:locked(是否锁定)、woken(是否有唤醒的 waiter)、starving(饥饿模式标志),低 29 位是等待者计数。模式:① 正常模式——新 goroutine 直接 CAS 尝试抢锁,抢不到进等待队列(FIFO),唤醒的 waiter 与新来的竞争(新来的可能在栈上自旋,有优势);② 饥饿模式——等待超过 1ms 进入,新来的直接排队不抢,防止 waiter 饿死;③ 自旋:短临界区场景 CAS 自旋(runtime 条件:多核 + 自旋次数上限 + 运行队列空)。

下载推广海报

圈内讨论推广海报

《Go sync.Mutex 源码解析:自旋、饥饿模式与状态位设计》完整推广海报
REPLIES

回复

0 条回复
暂无回复。