local.go 462 B

123456789101112131415161718192021222324252627282930313233
  1. package lock
  2. import (
  3. "sync"
  4. )
  5. type Local struct {
  6. Locks *sync.Map
  7. }
  8. func (l *Local) Lock(key string) {
  9. lock := l.GetLock(key)
  10. lock.Lock()
  11. }
  12. func (l *Local) UnLock(key string) {
  13. lock, ok := l.Locks.Load(key)
  14. if ok {
  15. lock.(*sync.Mutex).Unlock()
  16. }
  17. }
  18. func (l *Local) GetLock(key string) *sync.Mutex {
  19. lock, _ := l.Locks.LoadOrStore(key, &sync.Mutex{})
  20. return lock.(*sync.Mutex)
  21. }
  22. func NewLocal() *Local {
  23. return &Local{
  24. Locks: &sync.Map{},
  25. }
  26. }