package pool import "sync" // Pool - type Pool struct { q chan bool wg *sync.WaitGroup } // NewPool - func NewPool(size int) *Pool { if size < 1 { size = 1 } p := &Pool{ q: make(chan bool, size), wg: &sync.WaitGroup{}, } return p } // Add new queue work func (p *Pool) Add() { p.q <- true p.wg.Add(1) } // Done finish work func (p *Pool) Done() { <-p.q p.wg.Done() } // Wait - func (p *Pool) Wait() { p.wg.Wait() }