16 lines
294 B
Go
16 lines
294 B
Go
package utils
|
|
|
|
import "sync"
|
|
|
|
type KeyedMutex struct {
|
|
mutexes sync.Map // Zero value is empty and ready for use
|
|
}
|
|
|
|
func (m *KeyedMutex) Lock(key string) func() {
|
|
value, _ := m.mutexes.LoadOrStore(key, &sync.Mutex{})
|
|
mtx := value.(*sync.Mutex)
|
|
mtx.Lock()
|
|
|
|
return func() { mtx.Unlock() }
|
|
}
|