🎭 Fix race error

This commit is contained in:
Andy Pan 2019-04-13 11:15:09 +08:00
parent aa7dd6f8cc
commit 05fbdb8d5b
3 changed files with 31 additions and 33 deletions

View File

@ -95,40 +95,40 @@ func TestAntsPoolWithFuncWaitToGetWorker(t *testing.T) {
t.Logf("memory usage:%d MB", curMem)
}
// TestAntsPoolGetWorkerFromCache is used to test getting worker from sync.Pool.
// func TestAntsPoolGetWorkerFromCache(t *testing.T) {
// p, _ := ants.NewPool(TestSize)
// defer p.Release()
TestAntsPoolGetWorkerFromCache is used to test getting worker from sync.Pool.
func TestAntsPoolGetWorkerFromCache(t *testing.T) {
p, _ := ants.NewPool(TestSize)
defer p.Release()
// for i := 0; i < AntsSize; i++ {
// p.Submit(demoFunc)
// }
// time.Sleep(2 * ants.DefaultCleanIntervalTime * time.Second)
// p.Submit(demoFunc)
// t.Logf("pool, running workers number:%d", p.Running())
// mem := runtime.MemStats{}
// runtime.ReadMemStats(&mem)
// curMem = mem.TotalAlloc/MiB - curMem
// t.Logf("memory usage:%d MB", curMem)
// }
for i := 0; i < AntsSize; i++ {
p.Submit(demoFunc)
}
time.Sleep(2 * ants.DefaultCleanIntervalTime * time.Second)
p.Submit(demoFunc)
t.Logf("pool, running workers number:%d", p.Running())
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
curMem = mem.TotalAlloc/MiB - curMem
t.Logf("memory usage:%d MB", curMem)
}
// TestAntsPoolWithFuncGetWorkerFromCache is used to test getting worker from sync.Pool.
// func TestAntsPoolWithFuncGetWorkerFromCache(t *testing.T) {
// dur := 10
// p, _ := ants.NewPoolWithFunc(TestSize, demoPoolFunc)
// defer p.Release()
TestAntsPoolWithFuncGetWorkerFromCache is used to test getting worker from sync.Pool.
func TestAntsPoolWithFuncGetWorkerFromCache(t *testing.T) {
dur := 10
p, _ := ants.NewPoolWithFunc(TestSize, demoPoolFunc)
defer p.Release()
// for i := 0; i < AntsSize; i++ {
// p.Invoke(dur)
// }
// time.Sleep(2 * ants.DefaultCleanIntervalTime * time.Second)
// p.Invoke(dur)
// t.Logf("pool with func, running workers number:%d", p.Running())
// mem := runtime.MemStats{}
// runtime.ReadMemStats(&mem)
// curMem = mem.TotalAlloc/MiB - curMem
// t.Logf("memory usage:%d MB", curMem)
// }
for i := 0; i < AntsSize; i++ {
p.Invoke(dur)
}
time.Sleep(2 * ants.DefaultCleanIntervalTime * time.Second)
p.Invoke(dur)
t.Logf("pool with func, running workers number:%d", p.Running())
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
curMem = mem.TotalAlloc/MiB - curMem
t.Logf("memory usage:%d MB", curMem)
}
//-------------------------------------------------------------------------------------------
// Contrast between goroutines without a pool and goroutines with ants pool.

View File

@ -235,6 +235,5 @@ func (p *Pool) revertWorker(worker *Worker) bool {
// Notify the invoker stuck in 'retrieveWorker()' of there is an available worker in the worker queue.
p.cond.Signal()
p.lock.Unlock()
p.workerCache.Put(worker)
return true
}

View File

@ -239,6 +239,5 @@ func (p *PoolWithFunc) revertWorker(worker *WorkerWithFunc) bool {
// Notify the invoker stuck in 'retrieveWorker()' of there is an available worker in the worker queue.
p.cond.Signal()
p.lock.Unlock()
p.workerCache.Put(worker)
return true
}