内部记录了是谁在持有锁,在解锁时会打印使用锁的时间。
Internally records who is holding the lock, and prints the time when the lock is used when unlocking.
go.1.18 使用sync.mutex
封装,带有获取锁超时的额外功能。
go.1.18 Wrapped with sync.mutex
, with additional functionality for acquiring lock timeouts.
小于go1.18 的版本采用原子操作进行封装,对于锁的使用应该更快,当前是在通常情况下。
Versions smaller than go1.18 are encapsulated with atomic operations, and the use of locks should be faster, which is currently the usual case.
example: use mutex
package main
import "github.com/ywanbing/lock"
func main() {
mu := lock.NewDefMutex()
mu.Lock("lock1")
defer mu.Unlock()
// do something ...
}
example: use mutex with timeOut
package main
import (
"time"
"github.com/ywanbing/lock"
)
func main() {
mu := lock.NewDefMutex()
if !mu.LockWithTimeOut("lock1", 1*time.Second) {
return
}
defer mu.Unlock()
// do something ...
}
example: use self log component
package main
import (
"github.com/ywanbing/lock"
)
func main() {
// Implement lock.Logger to replace it with your own log
log := lock.NewLog()
mu := lock.NewMutex(log)
mu.Lock("lock1")
defer mu.Unlock()
// do something
}