// +build windows package pid import ( "errors" "sync" ) type Pool struct { sync.Mutex pool map[uint32]struct{} cur uint32 } func NewPool() *Pool { return &Pool{ pool: make(map[uint32]struct{}), } } func (p *Pool) Get() (uint32, error) { p.Lock() defer p.Unlock() pid := p.cur + 1 for pid != p.cur { // 0 is reserved and invalid if pid == 0 { pid = 1 } if _, ok := p.pool[pid]; !ok { p.cur = pid return pid, nil } pid++ } return 0, errors.New("pid pool exhausted") } func (p *Pool) Put(pid uint32) { p.Lock() delete(p.pool, pid) p.Unlock() }