26 lines
450 B
Go
26 lines
450 B
Go
|
package onedrive
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
// CredentialLock 针对存储策略凭证的锁
|
||
|
type CredentialLock interface {
|
||
|
Lock(uint)
|
||
|
Unlock(uint)
|
||
|
}
|
||
|
|
||
|
var GlobalMutex = mutexMap{}
|
||
|
|
||
|
type mutexMap struct {
|
||
|
locks sync.Map
|
||
|
}
|
||
|
|
||
|
func (m *mutexMap) Lock(id uint) {
|
||
|
lock, _ := m.locks.LoadOrStore(id, &sync.Mutex{})
|
||
|
lock.(*sync.Mutex).Lock()
|
||
|
}
|
||
|
|
||
|
func (m *mutexMap) Unlock(id uint) {
|
||
|
lock, _ := m.locks.LoadOrStore(id, &sync.Mutex{})
|
||
|
lock.(*sync.Mutex).Unlock()
|
||
|
}
|