gmutex.Mutex
互斥锁对象支持读写控制,互斥锁功能逻辑与标准库 sync.RWMutex
类似,可并发读但不可并发写。
互斥锁的设计细节,推荐阅读轻量级高清版的实现源码: https://github.com/gogf/gf/blob/master/os/gmutex/gmutex.go
使用方式:
import "github.com/gogf/gf/v2/os/gmutex"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/os/gmutex
type Mutex
func (m *Mutex) LockFunc(f func())
func (m *Mutex) TryLockFunc(f func()) (result bool)
type RWMutex
func New() *RWMutex
func (m *RWMutex) LockFunc(f func())
func (m *RWMutex) RLockFunc(f func())
func (m *RWMutex) TryLockFunc(f func()) (result bool)
func (m *RWMutex) TryRLockFunc(f func()) (result bool)
- 该互斥锁模块最大的特点是支持
Try*
方法以及*Func
方法。 Try*
方法用于实现尝试获得特定类型的锁,如果获得锁成功则立即返回true
,否则立即返回false
,不会阻塞等待,这对于需要使用非阻塞锁机制的业务逻辑非常实用。*Func
方法使用闭包匿名函数的方式实现特定作用域的并发安全锁控制,这对于特定代码块的并发安全控制特别方便,由于内部使用了defer
来释放锁,因此即使函数内部产生异常错误,也不会影响锁 机制的安全性控制。
基准测试
gmutex.Mutex
与标准库的 sync.Mutex
及 sync.RWMutex
的基准测试对比结果: gmutex_bench_test.go
goos: linux
goarch: amd64
pkg: github.com/gogf/gf/v2/os/gmutex
Benchmark_Mutex_LockUnlock-4 50000000 31.5 ns/op
Benchmark_RWMutex_LockUnlock-4 30000000 54.1 ns/op
Benchmark_RWMutex_RLockRUnlock-4 50000000 27.9 ns/op
Benchmark_GMutex_LockUnlock-4 50000000 27.2 ns/op
Benchmark_GMutex_TryLock-4 100000000 16.7 ns/op
Benchmark_GMutex_RLockRUnlock-4 50000000 38.0 ns/op
Benchmark_GMutex_TryRLock-4 100000000 16.8 ns/op