mirror of
https://github.com/Luzifer/ws-relay.git
synced 2024-11-09 14:50:00 +00:00
36 lines
592 B
Go
36 lines
592 B
Go
package main
|
|
|
|
import "sync"
|
|
|
|
type (
|
|
namedLocker struct {
|
|
lockers map[string]*sync.Mutex
|
|
self *sync.Mutex
|
|
}
|
|
)
|
|
|
|
func newNamedLocker() *namedLocker {
|
|
return &namedLocker{
|
|
lockers: make(map[string]*sync.Mutex),
|
|
self: new(sync.Mutex),
|
|
}
|
|
}
|
|
|
|
func (n *namedLocker) Lock(name string) {
|
|
n.getLocker(name).Lock()
|
|
}
|
|
|
|
func (n *namedLocker) Unlock(name string) {
|
|
n.getLocker(name).Unlock()
|
|
}
|
|
|
|
func (n *namedLocker) getLocker(name string) *sync.Mutex {
|
|
n.self.Lock()
|
|
defer n.self.Unlock()
|
|
|
|
if n.lockers[name] == nil {
|
|
n.lockers[name] = new(sync.Mutex)
|
|
}
|
|
|
|
return n.lockers[name]
|
|
}
|