go互斥锁底层原理

核心数据结构:sync.Mutex

type Mutex struct {
   
   
    state int32 // 核心状态字段,包含了多个信息
    sema  uint32 // 信号量,用于阻塞和唤醒 Goroutine
}

关键在于这个 state 字段,它是一个 32 位的整数,通过位操作同时记录了四种状态:

比特位 含义
第 0 位 (mutexLocked) 锁是否被持有:1 表示已锁定,0 表示未锁定。
第 1 位 (mutexWoken) 是否有被唤醒的 Goroutine:1 表示已有 Goroutine 被唤醒,正在尝试获取锁。用于避免不必要的唤醒。
第 2 位 (mutexStarving) 是否处于饥饿模式:1 表示饥饿模式。
第 3 位及以后 等待者的数量:当前阻塞在信号量上、等待锁的 Goroutine 的近似数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值