Mutex系列是根据我对晁岳攀老师的《Go 并发编程实战课》的吸收和理解整理而成,如有偏差,欢迎指正~
目标
本系列除了希望彻底学习和了解 golang 中 sync.Mutex 的原理和使用,更希望借 golang 中 Mutex 的发展和演变,了解并发场景下锁的设计与实现方法以及不通业务场景下的一些特殊考虑。
Mutex 简介
Mutex 是什么
Mutex 是 golang 标准库的互斥锁,主要用来处理并发场景下共享资源的访问冲突问题。
Mutex 定义
尽管 Mutex 的实现经历了多次的重大改版,但是因为设计的巧妙,使用上并没有发生任何变化。
package sync // import "sync"
type Mutex struct {
state int32
sema uint32
}
A Mutex is a mutual exclusion lock. The zero value for a Mutex is an
unlocked mutex.
A Mutex must not be copied after first use.
func (m *Mutex) Lock()
func (m *Mutex) Unlock()
从 Mutex 的定义一眼就能看出来如何使用,加锁使用 Lock 函数,解锁使用 Unlock 函数。
其实 package sync
中定义了 Locker 接口:
package sync // import "sync"
type Locker interface {
Lock