RWMutex是如何具体实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1878个文字,预计阅读时间需要8分钟。
概述:Go 中的 rwlock 是偏向写锁的,可避免写锁饥饿。读锁和写锁遵循先来后到的规则保持锁,一旦有协程持有了写锁,其他协程只能等待写锁释放后才能获得读锁。
Overviewgo 里面的 rwlock 是 write preferred 的,可以避免写锁饥饿。
读锁和写锁按照先来后到的规则持有锁,一旦有协程持有了写锁,后面的协程只能在写锁被释放后才能得到读锁。
同样,一旦有 >= 1 个协程写到了读锁,只有等这些读锁全部释放后,后面的协程才能拿到写锁。
下面了解一下 Go 的 RWMutex 是如何实现的吧,下面的代码取自 go1.17.2/src/sync/rwmutex.go,并删减了 race 相关的代码。
本文共计1878个文字,预计阅读时间需要8分钟。
概述:Go 中的 rwlock 是偏向写锁的,可避免写锁饥饿。读锁和写锁遵循先来后到的规则保持锁,一旦有协程持有了写锁,其他协程只能等待写锁释放后才能获得读锁。
Overviewgo 里面的 rwlock 是 write preferred 的,可以避免写锁饥饿。
读锁和写锁按照先来后到的规则持有锁,一旦有协程持有了写锁,后面的协程只能在写锁被释放后才能得到读锁。
同样,一旦有 >= 1 个协程写到了读锁,只有等这些读锁全部释放后,后面的协程才能拿到写锁。
下面了解一下 Go 的 RWMutex 是如何实现的吧,下面的代码取自 go1.17.2/src/sync/rwmutex.go,并删减了 race 相关的代码。

