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 1
你这样给 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 1
@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 1
搞个 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
|