Go 源码之互斥锁 Mutex

本文深入探讨了 Go 语言中互斥锁(sync.Mutex)的实现原理,包括其源码分析,重点讲解了 Lock 和 Unlock 方法。文中提到,Mutex 通过 CAS 原子操作实现加锁和解锁,并介绍了正常模式和饥饿模式,以及如何避免死锁和提高并发性能。此外,还讨论了锁的自旋、线程安全和信号量在锁机制中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、总结

  • 锁不可复制:拷贝互斥锁同时会拷贝锁的状态,容易造成死锁

  • 不是可重入锁,并且一个协程上锁,可以由另外一个协程解锁

  • mutex 锁结构

    • state:32位,锁状态,bitmap 设计,

      • 1 mutexLocked :低1位 锁定状态

      • 2 mutexWoken :低2位,从正常模式被唤醒

      • 3 mutexStarving 是低3位,进入饥饿模式

      • 4.mutexWaiterShift 剩下 29 位,当前互斥锁上等待者的数量

    • sema:协程等待信号量,用于控制goroutine的阻塞与唤醒

  • 上锁

    mutex 上锁

  • 解锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五岁小孩吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值