Compare commits

...

2 Commits

Author SHA1 Message Date
23b2b783e7 Merge pull request '[🚀] v0.12.22' (#22) from dev into main
Reviewed-on: #22
2025-02-27 15:42:16 +08:00
1ef1a68948 [🚀] v0.12.22 2025-02-27 15:41:45 +08:00

View File

@ -1,47 +0,0 @@
package lock
import (
"sync"
"sync/atomic"
)
var _ Locker = (*locker)(nil)
type Locker interface {
condition() bool
Lock()
Unlock()
}
type locker struct {
lock *sync.Mutex
cond *sync.Cond
v *atomic.Bool
}
func NewLocker() Locker {
lock := new(sync.Mutex)
return &locker{
lock: lock,
cond: sync.NewCond(lock),
v: new(atomic.Bool),
}
}
func (l *locker) condition() bool {
return l.v.Load()
}
func (l *locker) Lock() {
l.cond.L.Lock()
for l.condition() {
l.cond.Wait()
}
l.v.Store(true)
}
func (l *locker) Unlock() {
l.v.Store(false)
l.cond.L.Unlock()
l.cond.Signal()
}