func BenchmarkMutexLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.Mutex
lock.Lock()
}
}
func BenchmarkRWMutexLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.RWMutex
lock.Lock()
}
}
func BenchmarkRWMutexRLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.RWMutex
lock.RLock()
}
}
func BenchmarkMutexLockUnLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.Mutex
lock.Lock()
lock.Unlock()
}
}
func BenchmarkRWMutexLockUnLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.RWMutex
lock.Lock()
lock.Unlock()
}
}
func BenchmarkRWMutexRLockRUnLock(b *testing.B) {
for i := 0; i < b.N; i++ {
var lock sync.RWMutex
lock.RLock()
lock.RUnlock()
}
}
并发场景中, 互斥锁 与 读写锁 是常用解决访问冲突的两种锁:
互斥锁(Mutex)
读写锁(RWMutex)
从两种锁的特性看, 读写锁能够完全替代互斥锁. 但通常提到读写锁时都会说: 读写锁用于 读多写少 的场景.
我们从 benchmark 结果看原因:
从结果上看, 读写锁的效率会低于互斥锁! 虽然理论上读写锁可以替代互斥锁, 但不推荐!
赋上 benchmark 代码