独孤侠

Results 22 comments of 独孤侠

``` func TestMaster(t *testing.T) { wg := sync.WaitGroup{} wg2 := sync.WaitGroup{} w := NewMaster(10, 2) ctx, cel := context.WithCancel(context.Background()) li := w.AddLine("testli", func(e interface{}) { defer wg.Done() }) for i...

记的多跑几次,几个问题都会暴露出来的。

你的代码需要优化。用了好多互斥锁。单线程,原子锁。

Master.resetGuard 这个是用来干什么用的?

> 确保只有一个协程能重置m.cursor 原因呢? 你里面本来就是一个原子操作了

还有就是getWorker为什么是递归?不应该是循环吗?

还有,就算你在这里读到了任务参数,开始运行了,但是你在select中做的w.action(params),没有做异常保护。也可能导致出问题。

如果在 // 置为繁忙状态 atomic.StoreInt32(&w.isBusy, 1) 之前, if atomic.CompareAndSwapInt32(&w.isBusy, 0, 1) { 这个刚被执行呢?

``` func (w *worker) assign(action func(interface{}), params interface{}) bool { if atomic.CompareAndSwapInt32(&w.isBusy, 0, 1) { time.Sleep(time.Second) w.action = action w.params

``` func TestMaster(t *testing.T) { wg := sync.WaitGroup{} wg2 := sync.WaitGroup{} w := factory.NewMaster(100, 2) ctx, cel := context.WithCancel(context.Background()) li := w.AddLine("testli", func(e interface{}) { defer wg.Done() time.Sleep(time.Second * 1)...