bigbluebutton-Github/bbb-graphql-middleware/internal/common/CustomCache.go

38 lines
629 B
Go
Raw Normal View History

package common
import (
"sync"
)
var GlobalCacheLocks = NewCacheLocks()
type CacheLocks struct {
locks map[string]*sync.Mutex
mutex sync.Mutex // Protects the 'locks' map
}
func NewCacheLocks() *CacheLocks {
return &CacheLocks{
locks: make(map[string]*sync.Mutex),
}
}
func (c *CacheLocks) Lock(id string) {
c.mutex.Lock()
if _, exists := c.locks[id]; !exists {
c.locks[id] = &sync.Mutex{}
}
mtx := c.locks[id]
c.mutex.Unlock()
mtx.Lock() // Lock the specific ID mutex
}
func (c *CacheLocks) Unlock(id string) {
c.mutex.Lock()
if mtx, exists := c.locks[id]; exists {
mtx.Unlock()
}
c.mutex.Unlock()
}