← 返回首页
锁释放后,等待中的 Goroutine 中哪一个会优先获取 Mutex 呢?
取决于Mutex当前处于正常模式还是饥饿模式。
在正常模式下,锁的分配是"不公平"的。
当锁被释放时,等待队列中的第一个goroutine会被唤醒,但它不一定能拿到锁。
它需要和那些此刻刚刚到达、正在自旋的新goroutine进行竞争。
新来的goroutine因为正在CPU上运行,很有可能"插队"成功,直接抢到锁。这种策略的优点是吞吐量高,但缺点是可能导致等待队列中的goroutine被饿死。
而一旦Mutex进入饥饿模式,锁的分配就变得"绝对公平"。
锁被释放后,会直接移交给等待队列的队头goroutine,任何新来的goroutine都不会参与竞争,必须乖乖排到队尾。