diff --git a/examples/main.go b/examples/main.go index 3d9e26d..413cb36 100644 --- a/examples/main.go +++ b/examples/main.go @@ -34,8 +34,8 @@ import ( var sum int32 func myFunc(i interface{}) error { - n := i.(int) - atomic.AddInt32(&sum, int32(n)) + n := i.(int32) + atomic.AddInt32(&sum, n) fmt.Printf("run with %d\n", n) return nil } @@ -73,7 +73,7 @@ func main() { // submit tasks for i := 0; i < runTimes; i++ { wg.Add(1) - p.Serve(i) + p.Serve(int32(i)) } wg.Wait() fmt.Printf("running goroutines: %d\n", p.Running()) diff --git a/pool.go b/pool.go index ee14834..72fc7e2 100644 --- a/pool.go +++ b/pool.go @@ -140,6 +140,7 @@ func (p *Pool) getWorker() *Worker { p.running++ } } else { + <-p.freeSignal w = workers[n] workers[n] = nil p.workers = workers[:n] @@ -148,20 +149,13 @@ func (p *Pool) getWorker() *Worker { if waiting { <-p.freeSignal - for { - p.lock.Lock() - workers = p.workers - l := len(workers) - 1 - if l < 0 { - p.lock.Unlock() - continue - } - w = workers[l] - workers[l] = nil - p.workers = workers[:l] - p.lock.Unlock() - break - } + p.lock.Lock() + workers = p.workers + l := len(workers) - 1 + w = workers[l] + workers[l] = nil + p.workers = workers[:l] + p.lock.Unlock() } else if w == nil { w = &Worker{ pool: p,