Mutex是一个互斥的排他锁,零值Mutex为未上锁状态,Mutex一旦被使用 禁止被拷贝。使用起来也比较简单package mainimport "sync"func main() { m := sync.Mutex{} m.Lock() defer m.Unlock() // do something}Mutex有两种操作模式:正常模式(非公平模式)阻塞等待的goroutine保存在FIFO的队列中,唤醒的goroutine不直接拥有锁,需要与新来的goroutine竞争获取锁。因为新来的goroutine很多已经占有了CPU,所以唤醒的goroutine在竞争中很容易输;但如果一个goroutine获取锁失败超过1ms,则会将Mutex切换为饥饿模式。饥饿模式(公平模式)这种模式下,直接将等待队列队头goroutine解锁goroutine;新来的gorountine也不会尝试获得锁,而是直接插入到等待队列队尾。mutex mode如果一个goroutine获得了锁,并且他在等待队列
………………………………