go语言学习笔记 — 进阶 — 并发编程(10):读写互斥锁(sync.RWMutex) —— 在读比写多的环境下,比互斥锁更高效

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 并发编程(10):读写互斥锁(sync.RWMutex) —— 在读比写多的环境下,比互斥锁更高效相关的知识,希望对你有一定的参考价值。

在读多写少的场景中,可以优先使用读写互斥锁,sync包中的RWMutex提供了读写互斥锁的封装。

var (
    count      int          // 某个逻辑中使用的变量,如包级别变量、结构体成员字段变量
    countGuard sync.RWMutex // 变量名+Guard,以表示这个读写互斥锁用于保护这个变量
)

// 获取一个count值,通过这个函数可以并发安全地访问变量count
func GetCount() int {
    countGuard.RLock() // 对互斥量countGuard加锁。一旦互斥量被加锁,如果另一个goroutine尝试继续加锁时会发生阻塞,直到互斥量解锁

    defer countGuard.RUnlock()

    return count
}

以上是关于go语言学习笔记 — 进阶 — 并发编程(10):读写互斥锁(sync.RWMutex) —— 在读比写多的环境下,比互斥锁更高效的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 并发编程:为函数创建goroutine

go语言学习笔记 — 进阶 — 并发编程:调整并发的运行性能(GOMAXPROCS)

go语言学习笔记 — 进阶 — 并发编程:同步sync,竞态检测 —— 检测代码在并发环境下出现的问题

go语言学习笔记 — 进阶 — 并发编程:通道(channel) —— 在多个goroutine之间通信的管道

go语言学习笔记 — 进阶 — 并发编程:通道(channel)—— 使用channel收发数据

go语言学习笔记 — 进阶 — 并发编程:go语言的协程goroutine,与普通程序的协程coroutine