diff --git a/sysutils.go b/sysutils.go index 9e4f5fe..2a547e8 100644 --- a/sysutils.go +++ b/sysutils.go @@ -73,6 +73,29 @@ func ReleaseLock(l *sync.Mutex) { l.Unlock() } +func BatchAllocLock(keys []string) []*sync.Mutex { + locks := []*sync.Mutex{} + lock := sync.Mutex{} + for _, key := range keys { + go func () { + l := AllocLock(key) + lock.Lock() + q5.AppendSlice(&locks, l) + lock.Unlock() + }() + } + for len(locks) < len(keys) { + time.Sleep(time.Millisecond * 10) + } + return locks +} + +func BatchReleaseLock(locks []*sync.Mutex) { + for _, val := range locks { + ReleaseLock(val) + } +} + func init() { switch os.Getenv("SERVER_ENV") { case "TEST":