github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/oauth/mutex.go (about)

     1  package oauth
     2  
     3  import "sync"
     4  
     5  // CredentialLock 针对存储策略凭证的锁
     6  type CredentialLock interface {
     7  	Lock(uint)
     8  	Unlock(uint)
     9  }
    10  
    11  var GlobalMutex = mutexMap{}
    12  
    13  type mutexMap struct {
    14  	locks sync.Map
    15  }
    16  
    17  func (m *mutexMap) Lock(id uint) {
    18  	lock, _ := m.locks.LoadOrStore(id, &sync.Mutex{})
    19  	lock.(*sync.Mutex).Lock()
    20  }
    21  
    22  func (m *mutexMap) Unlock(id uint) {
    23  	lock, _ := m.locks.LoadOrStore(id, &sync.Mutex{})
    24  	lock.(*sync.Mutex).Unlock()
    25  }