Go Mutex

两种模式
– 正常模式
– goroutine尝试加锁,自旋原子操作获得锁
– 自旋后获取不到锁,进入等待队列,FIFO
– 当锁被释放,队列头并不能立即获得锁,而是和正在自选的goroutine竞争
– 如果竞争失败,会放入等待队列头部.
– 如果当一个goroutine等待时间超过1ms之后,会把mutex切换成饥饿模式
– 饥饿模式
– 直接从等待队列头获得锁, 其他新加入的goroutine直接进入等待队列尾部
– 切换成正常模式触发条件
– 当前获得锁的goroutine的等待时间小于1ms
– 等待队列为空,它是最后一个等待者


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注