本书未发布

Go 源码解析

未匹配的标注

Go 的互斥锁

type Mutex struct {
    state int32
    sema  uint32
}

锁的概念:一个门上有一把锁,每次只允许一个人进去。第一个人拿到钥匙后进去了,处理完事情出来再把钥匙交给下一个人。下一个人继续如此循环。

分配钥匙:等待钥匙的人通过抢的方式获取🔑,但是新来的人总是能过先抢到钥匙。为了保证公平,记录每个人的等待时间,如果等待时间超过1ms的则优先获取到🔑。

锁的状态:

  • 正常状态:没有人等待时间超过1ms
  • 饥饿状态:有人等待时间超过1ms

在正常状态下,如果新来的人没拿到🔑,会让他先在门口直接等待🔑,时间是CPU的30个周期。这里称之为:自旋。不过自旋的条件很严苛,还必须是多CPU,非饥饿状态。

除了状态,还会记录等待人的数量。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~