看啥推荐读物
专栏名称: Go语言中文网
Golang爱好者社区,这里有精选的网站上数千篇优秀文章供你学习,内容涵盖Golang基础系列教程、实战教程等优秀开源项目实践,同时会分享职场经验。每周获取Golang一周资讯等值得关注的内容
目录
相关文章推荐
今天看啥  ›  专栏  ›  Go语言中文网

你真的了解 sync.Mutex吗

Go语言中文网  · 公众号  · go  · 2021-02-19 08:52
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获得了锁,并且他在等待队列 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照