
1 maocat 2022-07-18 23:26:42 +08:00 via iPhone 为什么不用 errgroup |
3 Askiz OP @maocat 看了一下 errGroup 的用法,虽然也可以代替 waitgroup ,但是好像和 errGroup 的定义即有错误就退出的应用场景有点不太相符吧? |
4 Trim21 2022-07-19 02:03:01 +08:00 via Android 你这样给 result 赋值可能会因为 data race 而 panic 吧 |
5 Trim21 2022-07-19 02:18:41 +08:00 via Android 既然都用了 wait group 了为什么 MultiJudge 还要额外用 resultChan 来控制,为什么不直接把 wg.Wait 移到外面来,删掉 result chan ? 或者直接用 result chan 来传递各个 goroutine 的结果,还能避免并发读写的问题。 |
7 djoiwhud 2022-07-19 08:17:12 +08:00 via Android result 确实会 panic 这两个函数没一个字的注释,我敢说,你自己都没想明白到底是要做什么。 最大的问题是写的太嗦。实际项目上不会这么写。 |
8 love2020 2022-07-19 08:59:39 +08:00 前面大佬说了 result 共享内存了都, 玩的什么皮 |
9 Askiz OP @Trim21 这个其实做的是 if(judge1(value) || judge2(value) || judge3(value)) 这样的判断,如果有一个返回真其他就不继续等待结果了,所以我把 wg.Wait()放到协程里去了 |
11 Trim21 2022-07-19 13:19:36 +08:00 @Askiz #9 你的 gorountine 里面就没必要写 resultChan <- ,这些 router 都已经运行完了 judgeFunc(value),为什么还要阻塞呢。 https://gist.github.com/Trim21/157f85d710dae45e29d7c10504a4c93d atomic 没给 bool 类型,就直接用 int32 了 |
13 Askiz OP 因为我想有一个 judgefunc 为这真就马上返回结果,不等待其他协程运行结束,所以把 wg.wait 放到协程里,如果都不为真,wg.wait 语句结束后会往 resultchan 里传值,外面语句接收到信号后才返回结果 false |
14 zjj19950716 2022-07-19 16:33:03 +08:00 搞个 judgefuncs 次长度的 resultChan ,就在外面读 judgefuncs 次 resultChan , 有 true 就返回 true ,一轮下来都没就 false 。 |
15 MatthewMurdock 2022-07-19 18:50:27 +08:00 https://gist.github.com/murDDock/a89734f2378bf433d18c9f6a814e7918 我稍微修改了一下 有点嗦 我也不太行 一起学习 |
16 Askiz OP https://gist.github.com/mingkwind/fdbf7d076a6677d3d89bdc06c49053bd 采取 4P/14P/15P 的意见,改完差不多是这样 |
17 eastphoton 2022-07-19 20:54:24 +08:00 说句难听的,充满了脱裤子放屁。。。 |
18 js2854 2022-07-21 13:36:42 +08:00 errgroup +1 |