1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package models
- import (
- "sync"
- )
- type workingPool struct {
- lock sync.Mutex
- pool map[string]*sync.Mutex
- count map[string]int
- }
- func (p *workingPool) CheckIn(name string) {
- p.lock.Lock()
- lock, has := p.pool[name]
- if !has {
- lock = &sync.Mutex{}
- p.pool[name] = lock
- }
- p.count[name]++
- p.lock.Unlock()
- lock.Lock()
- }
- func (p *workingPool) CheckOut(name string) {
- p.lock.Lock()
- defer p.lock.Unlock()
- p.pool[name].Unlock()
- if p.count[name] == 1 {
- delete(p.pool, name)
- delete(p.count, name)
- } else {
- p.count[name]--
- }
- }
|