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 }