Please enable Javascript to view the contents

Golang-中级-并发原语WaitGroup

 ·  ☕ 1 分钟

WaitGroup 的注意事项

  1. WaitGroup不能复制
    现象: WaitGroup作为函数的参数进行传递(函数参数是值传递)时,会造成死锁,只能使用WaitGroup指针传递
    原因: WaitGroup有nocopy字段,不能被复制。
    建议:避免WaitGroup在函数之间传递,是在要共用必须采取指针传递

  2. Add计数器小于0会直接panic
    现象:Add一个负数,如果计数器的值小于0会直接panic
    原因:Add计数器必须大于0
    建议:Add计数器必须大于0

  3. Add在Wait之后调用,比如一些子协程开头调用Add结束调用Wait,这些Wait无法阻塞子协程。正确做法是在开启子协程之前先Add特定的值。

  4. 未置为0就重用,WaitGroup可以完成一次编排任务,计数值降为0后可以继续被其他任务所用,但是不要在还没使用完的时候就用于其他任务,这样由于带着计数值,很可能出问题。

  5. add和done必须成对出现

分享

Hex
作者
Hex
CloudNative Developer

目录