Mutex unlock问题

来源:1-9 神奇的内置数据结构

东泽XD

2021-06-08 21:20:40

为什么饥饿状态下unlockSlow直接返回?

或者说,在下图unlockSlow直接返回的情况下,队列中的goroutine如何获取锁(激活)?


http://img.mukewang.com/climg/60bf6f3c08a6d6e108700551.jpg

写回答

1回答

Xargin

2021-06-12

这是因为这个 unlock 的 goroutine 一开始认为 new & mutexStarving == 0,是非饥饿模式,

但是进入 if 以后再检查发现已经有别人抢到了锁/或者锁进入了饥饿模式

这说明已经有其它的 goroutine 把队列中等待的 g 唤醒了,

这种情况下,控制权应该在新的 goroutine 那边,自己就不需要再做一次唤醒了

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程

相似问题