互斥锁
互斥锁控制下的多个写操作之间、多个读操作之间是互斥的,并且写操作与读操作之间也是互斥的。
互斥锁适用于读写不确定场景,即读写次数没有明显的区别,并且只允许只有一个读或者写的场景,所以该锁叶叫做全局锁,也就是完全互斥。
var mutex sync.Mutex
func write() {
mutex.Lock() //加互斥锁
defer mutex.Unlock() //解互斥锁
// 省略若干条语句
}
读写锁
读写锁控制下的多个写操作之间都是互斥的,并且写操作与读操作之间也都是互斥的。但是,多个读操作之间却不存在互斥关系。
var mutex sync.RWMutex
func write() {
mutex.RLock() //加读写锁
defer mutex.RUnlock() //解读写锁
// 省略若干条语句
}