go中的sync.Mutex
golang中的互斥锁定义在 src/sync/mutex.go 源码中给出了互斥量公平的解释,差不多意思如下: 互斥锁可以处于两种操作模式:normal和starvation。 在normal模式下,新加入竞争锁队列的协程也会直接参与到锁的竞争中来,处于starvation模式下,所以新加入的协程将直接进入等待队列中挂起,直到其等待队列之前的协程全部执行完毕。 normal模式下, 协程的竞争等待时间如果大于1ms,就会进入starvation模式。 starvation模式下,该协程 是等待队列中的最后一个工作协程,或者它挂起等待时长不到1ms,则切换回normal模式。 state用于存储Mutex的状态量,具体可以看下下面const,state的最低位(mutexLocked)用于表示是否上锁,低二位(mutexWoken)用来表示当前锁是否唤醒,低三位(mutexStarving)用来表示当前锁是否处于starvation模式。剩下位数据state>> mutexWaitershif ( mutexWaitershif为3 )用来表示当前被阻塞的协程数量,sema是一个信号量,协程阻塞的依据。 type Mutex struct { state int32 sema uint32 } const ( mutexLocked = 1 << iota // mutex is