sync.Mutex (对map加锁)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sync.Mutex (对map加锁)相关的知识,希望对你有一定的参考价值。

A Tour of Go

concurrency >> sync.Mutex

https://tour.golang.org/concurrency/9

golang 里的 map 并不是 concurrency-safe 的,也就是说,当多个 goroutine 对同一个 map 进行操作时,有可能发生冲突。

教程中给出了一个例子,对 map 加锁避免冲突:

技术分享

 

其中,如果把 go c.Inc("somekey") 改成

go func() { c.v["somekey"]++ }()

也就是说改成不锁map的方式,那么,运行时会发生错误,显示如下错误信息:

fatal error: concurrent map writes

 

注意,加锁后,虽然发起了多个 goroutine, 但由于有锁,只能一个一个依次执行,因此,在 Lock() 与 Unlock() 之间的代码将失去并发(concurrency)的意义。

 

以上是关于sync.Mutex (对map加锁)的主要内容,如果未能解决你的问题,请参考以下文章

go中的sync.Mutex 和 sync.RWMutex

go中的sync.Mutex 和 sync.RWMutex

# go语言Mutex与RWMutex

go语言sync包的学习(MutexWaitGroupCond)

Go 使用互斥锁(sync.Mutex)实现线程安全的内存本地缓存(LocalCache)

go语言学习笔记 — 进阶 — 并发编程:互斥锁(sync.Mutex)—— 保证同时只有一个goroutine可以访问共享资源