Mutex unlock问题
来源:1-9 神奇的内置数据结构
东泽XD
2021-06-08 21:20:40
为什么饥饿状态下unlockSlow直接返回?
或者说,在下图unlockSlow直接返回的情况下,队列中的goroutine如何获取锁(激活)?
1回答
这是因为这个 unlock 的 goroutine 一开始认为 new & mutexStarving == 0,是非饥饿模式,
但是进入 if 以后再检查发现已经有别人抢到了锁/或者锁进入了饥饿模式,
这说明已经有其它的 goroutine 把队列中等待的 g 唤醒了,
这种情况下,控制权应该在新的 goroutine 那边,自己就不需要再做一次唤醒了
相似问题